zoukankan      html  css  js  c++  java
  • TreeView控件保存恢复结点展开状态

    帮助TreeView保存和恢复结点展开状态的辅助类
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI.WebControls;

    /// <summary>
    /// Heros TreeView保存和恢复结点展开状态的辅助类
    /// </summary>
    public class TreeNodesExpandStateManager : IDisposable
    {
        TreeView _tree;
        List
    <TreeNode> nodes = new List<TreeNode>();

        
    public static string SessionKey = "TreeNodesExpandState";
        
    public TreeNodesExpandStateManager(TreeView tree)
        {
            _tree 
    = tree;
        }

        
    /// <summary>
        
    /// 保存当前树的展开状态
        
    /// </summary>
        public void SaveExpandState()
        {
            
    foreach (TreeNode node in this._tree.Nodes)
            {
                SearchExpandedNode(node);
            }
        }

        
    private void SearchExpandedNode(TreeNode node)
        {
            
    if (node == null)
                
    return;
            
    else
            {
                
    if (node.Expanded ?? false)
                {
                    nodes.Add(node);
                    
    foreach (TreeNode item in node.ChildNodes)
                    {
                        SearchExpandedNode(item);
                    }
                }
            }
        }

        
    /// <summary>
        
    /// 恢复当前树的展开状态
        
    /// </summary>
        public void RestoreExpandState()
        {
            
    foreach (TreeNode node in this._tree.Nodes)
            {
                SetNodeExpandState(node);
            }
        }

        
    /// <summary>
        
    /// 用于跨页操作时,恢复到指定树
        
    /// </summary>
        
    /// <param name="tree"></param>
        public void RestoreExpandStateToTree(TreeView tree)
        {
            
    foreach (TreeNode node in tree.Nodes)
            {
                SetNodeExpandState(node);
            }
        }

        
    private void SetNodeExpandState(TreeNode node)
        {
            
    if (node == null)
                
    return;
            
    else
            {
                
    if (this.nodes.Contains(node, new EqualEntity()))
                {
                    node.Expand();
                    
    foreach (TreeNode item in node.ChildNodes)
                    {
                        SetNodeExpandState(item);
                    }
                }
            }
        }

        
    /// <summary>
        
    /// 将指定树展开状态存入会话,一般在树的展开和合闭事件中调用
        
    /// </summary>
        
    /// <param name="tree">目标树</param>
        public static void SaveExpandStateInSession(TreeView tree, string sessionKey)
        {
            
    if (tree == null)
                
    return;
            TreeNodesExpandStateManager manager 
    = new TreeNodesExpandStateManager(tree);
            manager.SaveExpandState();
            HttpContext.Current.Session[sessionKey] 
    = manager;
        }

        
    /// <summary>
        
    /// 将指定树展开状态存入默认会话,一般在树的展开和合闭事件中调用
        
    /// </summary>
        
    /// <param name="tree">目标树</param>
        public static void SaveExpandStateInSession(TreeView tree)
        {
            SaveExpandStateInSession(tree, SessionKey);
        }

        
    /// <summary>
        
    /// 将Session中的结点展开状态恢复到指定树,在树结点添加结束后调用
        
    /// </summary>
        
    /// <param name="tree">目标树</param>
        public static void RestoreExpandStateToTreeFromSession(TreeView tree, string sessionKey)
        {
            
    if (HttpContext.Current.Session[sessionKey] == null || tree == null)
                
    return;
            TreeNodesExpandStateManager manager 
    = HttpContext.Current.Session[sessionKey] as TreeNodesExpandStateManager;
            manager.RestoreExpandStateToTree(tree);
        }
        
    /// <summary>
        
    /// 将默认Session中的结点展开状态恢复到指定树,在树结点添加结束后调用
        
    /// </summary>
        
    /// <param name="tree">目标树</param>
        public static void RestoreExpandStateToTreeFromSession(TreeView tree)
        {
            RestoreExpandStateToTreeFromSession(tree, SessionKey);
        }

        
    #region IDisposable 成员

        
    public void Dispose()
        {
            
    this.nodes.Clear();
            
    this.nodes = null;
            
    this._tree.Dispose();
        }

        
    #endregion

         
    ~TreeNodesExpandStateManager()
        {
            
    this.Dispose();
        }

         
    public class EqualEntity : IEqualityComparer<TreeNode>
         {
             
    #region IEqualityComparer<TreeNode> 成员

             
    public bool Equals(TreeNode x, TreeNode y)
             {
                 
    if (x == null || y == null)
                     
    return false;
                 
    return x.Value.Equals(y.Value);
             }

             
    public int GetHashCode(TreeNode obj)
             {
                 
    return obj.GetHashCode();
             }

             
    #endregion
         }
    }

  • 相关阅读:
    机器学习:贝叶斯分类器(一)——朴素贝叶斯分类器
    机器学习:kNN算法(二)—— 实战:改进约会网站的配对效果
    机器学习:kNN算法(一)—— 原理与代码实现(不调用库)
    Oracle给表设置自增字段
    IMAP、POP3、SMTP邮件服务器
    网站高并发大流量访问的10个处理及解决方案
    浅谈async/await
    【前端】加载的图片太多或者太大优化方案(上)
    【前端】本地调试H5页面方案总结
    alphafold2_conda版安装
  • 原文地址:https://www.cnblogs.com/heros/p/1500228.html
Copyright © 2011-2022 走看看