`

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

    4. **结点保存到XML** - 将`TreeView`的结构保存到XML文件,首先需要创建一个`XmlWriter`实例,然后逐个遍历`TreeView`的节点,将每个节点的文本和标签信息写入XML。例如,使用`XDocument`或`XmlDocument`类可以...

    TreeView 结点 保存XML

    通过以上代码,我们可以实现将`TreeView`的结点数据保存为XML文件,并将XML文件重新导入到`TreeView`中,从而实现数据的持久化存储和恢复。这种方法在需要备份或迁移`TreeView`数据时非常有用,特别是在处理大量或...

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

    6. 更新视图状态:最后,由于ASP.NET是服务器端技术,你需要确保在页面回发时保存和恢复TreeView的状态。这可以通过调用EnsurePostBackTree()方法完成。 ```csharp protected override void OnInit(EventArgs e) { ...

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

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

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

    然而,标准的TreeView控件默认的样式可能显得相对单一,特别是其白色的背景。为了提升用户体验和界面的美观度,我们可以对控件进行自定义,比如添加背景图片。本文将详细讲解如何在C#的TreeView控件中实现这一功能。...

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

    在ASP.NET 2.0中,使用TREEVIEW控件动态地从数据库中获取数据并填充到树形结构中是一项非常实用的功能。本文将详细介绍如何实现这一功能,并通过一个具体的例子来说明其实施步骤。 #### 示例场景描述 假设我们有一...

    TreeView的CheckBoxs的第三种状态(有部分子结点被选中)

    本篇文章将深入探讨`TreeView`控件中复选框的第三种状态——部分子节点被选中的实现和应用场景。 首先,我们需要理解`TreeView`控件的基本操作。`TreeView`控件由一系列`TreeNode`对象组成,每个`TreeNode`可以包含...

    C#中的多选TreeView控件

    这可能需要自定义数据绑定逻辑,比如在`TreeView`控件的`AfterCheck`事件中更新数据源,或者在数据源更改时同步`TreeView`的状态。 3. **扩展`TreeView`控件** - 为了更好地封装多选逻辑,可以创建一个自定义的`...

    递归选中TreeView当前结点的所有子结点

    5. **状态记录**:保存用户的选中状态,以便下次打开应用时恢复。 递归选中`TreeView`节点的操作是基础,但其背后的思想和技巧可以应用于更复杂的UI交互和数据处理。通过理解递归的工作原理和`TreeView`控件的特性...

    TreeView(实现树的节点增加、删除、拖拽、修改节点名等)

    在Windows编程领域,`TreeView`控件是一种常用的数据可视化组件,用于展示层次结构的数据,比如文件系统、组织结构等。本篇文章将详细讲解如何利用`TreeView`控件实现树的节点增加、删除、拖拽以及修改节点名等功能...

    treeview节点选中后添加背景色

    在ASP.NET中,TreeView控件是一个非常常用的组件,它用于展示层次结构的数据,例如文件系统、组织结构等。在实际应用中,我们经常需要对TreeView的节点进行交互性操作,如改变节点的背景色来突出显示当前选中的节点...

    excel树控件

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

    删除TreeView节点以及其子节点

    1. **TreeView控件**:TreeView是Windows应用程序中常用的控件,用于展示层次结构的数据,比如文件系统、组织结构等。它包含一系列的节点,每个节点可以有子节点。 2. **删除节点**:在Delphi中,可以使用`TreeView...

    JS控制TreeView的结点选择

    首先,我们需要一个ASP.NET的TreeView控件来展示数据。在HTML代码中,我们看到这样的定义: ```html &lt;asp:TreeView ID="treeViewDapartment" runat="server" SelectedNodeStyle-BackColor="GrayText" onclick=...

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

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

    Virtual Treeview v6

    这款控件在Delphi社区中广受欢迎,因为它提供了比标准treeview控件更多的功能和性能优化,尤其适用于处理大量数据的情况。支持范围广泛,包括从较早的Delphi版本一直到XE10。 1. **虚拟化技术**: Virtual ...

    VirtualString参考.doc

    VirtualString Treeview 控件使用指南 VirtualString Treeview 是一个功能强大且灵活的树形控件,能够完全代替 Delphi 自带的 Treeview 和 Listview 控件。它提供了丰富的自定义功能,能够满足各种复杂的树形结构...

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

    如标题(显示文本)、说明(提供额外信息)、连接地址(点击后跳转的URL)、连接目标(指定新窗口或当前窗口打开链接)、结点图标(美化视觉效果)以及打开时的图标(表示状态,如展开或折叠)。这些定制选项使控件...

Global site tag (gtag.js) - Google Analytics