`

TreeView控件保存恢复结点展开状态

    博客分类:
  • .NET
阅读更多

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
     }
}

分享到:
评论

相关推荐

    C# TreeView控件终极演示 结点保存到xml

    演示了C#的treeView控件的绝大部分常用操作. 加入兄弟结点,子结点,删除结点,取结点的相关信息,结点保存进xml,由xml载入等.

    C# 系统应用之TreeView控件显示树状磁盘路径并在ListView显示文件

    资源主要是结合博客文章:http://blog.csdn.net/eastmount/article/details/21241313主要讲述使用C# winForm实现类似于资源管理器的界面,通过TreeView控件显示"我的电脑"所有磁盘文件树状目录,并点击结点文件夹能在...

    TreeView控件的节点拖动

    vs2005,vs2008软件都可打开 能对Treeview控件的结点进行双击编辑 Treeview之间的结点可以相互拖动,并自动更改名字 如果拖动错误,可以撤销还原为原来的状态

    asp.net 2.0中TREEVIEW中动态增加结点.rar

    asp.net 2.0中TREEVIEW中动态增加结点.rar

    C#中的多选TreeView控件

    一个TreeView控件,它以不同的方式实现多项选择

    对C#的树型控件TREEVIEW添加背景图片

    觉得树控件的背景白色太单调了?这个类可以非常方便简单的帮您的树控件加上背景图片,让您的界面更加美观:)

    excel树控件

    该文档做了一个excel treeView控件的样例,有展开结点,收缩结点,添加结点,修改结点,删除结点,关闭结点,并附上注释供参考

    TreeView显示XML文件

    自定义TreeView控件,通过递归地方式实现显示xml文件,可以通过右键增加兄弟节点、子节点,并且可以删除结点,可以用来学习如何手工绑定数据到TreeView控件中

    JS控件ASP.NET的treeview控件全选或者取消(示例代码)

    函数功能:实现带checkbox的treeview中 1、选中父结点其子结点也全部选中 2、取消全部子结点的选择后,父结点的选择也随之取消  使用方法:1、在&lt;head&gt;&lt;/head&gt;中间添加CheckNode(currentNode)、...

    asp.net学习大全(超全面的资料整合)

    包含内容部分示例: GridView导出excel 小山的TreeView数据绑定方法 ADO.NET在开发中的部分使用方法和技巧.txt ADO.NET中的视图和过滤器.doc ASP .NET - ArrayList对象.txt ...在ASP.NET中使用Treeview控件和XML.txt

    ASP.NET学习大全

    ASP.NET学习大全,包括以下文档: GridView导出excel 小山的TreeView数据绑定方法 ADO.NET在开发中的部分使用方法和技巧.txt ADO.NET中的视图和过滤器.doc ...在ASP.NET中使用Treeview控件和XML.txt

    Winfrom 上面的几种控件的拖动

    该程序是vs2005下的关于控件内容的拖动,treeview结点的拖动及文件相关。是个不错的研究程序.

    黑马软件工作室网页树形控件

    1、准确模拟window TreeView控件外观与行为。2、从数据库中读取结点结构,理论上可以无限级分级。3、对每个结点可以定义标题、说明、连接地址、连接目标、结点图标、结点打开时的图标。

    电子商务网站(ppt)

     商品分类浏览模块:用TreeView控件,循 环插入结点,直到全部完成;  购物车模块:用户登录后,可不断购买商 品,即向购物车中添加商品,用户查看购 物车并可提交或清空购物车继续购买

    C#有关treeview

    C#有关treeview的操作,了解C#控件的使用,以及C#的有关操作,有利于结点的产生。

    在Web中如何建立站点地图?

    使用TreeView控件显示导航信息 使用Menu控件显示导航信息 演示和练习:在母版页中使用Menu控件实现站点导航 使用SiteMapPath控件描述当前页面位置 自定义SiteMapPath控件的结点模版 演示和练习:在母版页中使用...

    C#编程经验技巧宝典

    6 &lt;br&gt;0014 如何锁定窗体中的控件 6 &lt;br&gt;0015 统一窗体中控件的字体设置 7 &lt;br&gt;0016 通过“格式”菜单布局窗体 7 &lt;br&gt;0017 起始页中的“Visual Studio开发人员新闻” 7 &lt;br&gt;1.3 MSDN帮助的...

    JavaFX实现拖拽结点效果

    主要为大家详细介绍了JavaFX实现拖拽结点效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Asp.net用户管理系统源码

    菜单采用TreeView+Sql数据库动态控制,可以进行权限及用户的管理操作,用户登录采用验证码进行校验,公用部分采用用户控件 树的操作说明如下: (1):单击【添加】按钮添加表结点,和结点相关联的表及其描述不能为...

Global site tag (gtag.js) - Google Analytics