`

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

阅读更多
帮助TreeView保存和恢复结点展开状态的辅助类
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->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