帮助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,由xml载入等.
资源主要是结合博客文章:http://blog.csdn.net/eastmount/article/details/21241313主要讲述使用C# winForm实现类似于资源管理器的界面,通过TreeView控件显示"我的电脑"所有磁盘文件树状目录,并点击结点文件夹能在...
vs2005,vs2008软件都可打开 能对Treeview控件的结点进行双击编辑 Treeview之间的结点可以相互拖动,并自动更改名字 如果拖动错误,可以撤销还原为原来的状态
asp.net 2.0中TREEVIEW中动态增加结点.rar
一个TreeView控件,它以不同的方式实现多项选择
觉得树控件的背景白色太单调了?这个类可以非常方便简单的帮您的树控件加上背景图片,让您的界面更加美观:)
该文档做了一个excel treeView控件的样例,有展开结点,收缩结点,添加结点,修改结点,删除结点,关闭结点,并附上注释供参考
自定义TreeView控件,通过递归地方式实现显示xml文件,可以通过右键增加兄弟节点、子节点,并且可以删除结点,可以用来学习如何手工绑定数据到TreeView控件中
函数功能:实现带checkbox的treeview中 1、选中父结点其子结点也全部选中 2、取消全部子结点的选择后,父结点的选择也随之取消 使用方法:1、在<head></head>中间添加CheckNode(currentNode)、...
包含内容部分示例: GridView导出excel 小山的TreeView数据绑定方法 ADO.NET在开发中的部分使用方法和技巧.txt ADO.NET中的视图和过滤器.doc ASP .NET - ArrayList对象.txt ...在ASP.NET中使用Treeview控件和XML.txt
ASP.NET学习大全,包括以下文档: GridView导出excel 小山的TreeView数据绑定方法 ADO.NET在开发中的部分使用方法和技巧.txt ADO.NET中的视图和过滤器.doc ...在ASP.NET中使用Treeview控件和XML.txt
该程序是vs2005下的关于控件内容的拖动,treeview结点的拖动及文件相关。是个不错的研究程序.
1、准确模拟window TreeView控件外观与行为。2、从数据库中读取结点结构,理论上可以无限级分级。3、对每个结点可以定义标题、说明、连接地址、连接目标、结点图标、结点打开时的图标。
商品分类浏览模块:用TreeView控件,循 环插入结点,直到全部完成; 购物车模块:用户登录后,可不断购买商 品,即向购物车中添加商品,用户查看购 物车并可提交或清空购物车继续购买
C#有关treeview的操作,了解C#控件的使用,以及C#的有关操作,有利于结点的产生。
使用TreeView控件显示导航信息 使用Menu控件显示导航信息 演示和练习:在母版页中使用Menu控件实现站点导航 使用SiteMapPath控件描述当前页面位置 自定义SiteMapPath控件的结点模版 演示和练习:在母版页中使用...
6 <br>0014 如何锁定窗体中的控件 6 <br>0015 统一窗体中控件的字体设置 7 <br>0016 通过“格式”菜单布局窗体 7 <br>0017 起始页中的“Visual Studio开发人员新闻” 7 <br>1.3 MSDN帮助的...
主要为大家详细介绍了JavaFX实现拖拽结点效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
菜单采用TreeView+Sql数据库动态控制,可以进行权限及用户的管理操作,用户登录采用验证码进行校验,公用部分采用用户控件 树的操作说明如下: (1):单击【添加】按钮添加表结点,和结点相关联的表及其描述不能为...