TreeView控件保存恢复结点展开状态
2009-06-10 10:43
253 查看
帮助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
}
}
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
}
}
相关文章推荐
- saveInstallState参数使用详解(android activity状态保存和恢复)
- canvas中的状态保存与恢复
- android保存和恢复activity的状态数据
- Android中保存和恢复Fragment状态的最好方法
- TreeView保存当前节点展开状态
- 保存/恢复Activity和Fragment状态的最佳实践(译)
- 03-06 创建和编辑AutoCAD实体(六) 保存和恢复图层状态
- C# 保存和读取TreeView展开的状态
- android -保存和恢复activity的状态数据
- [转]Asp.net Page 状态保存与恢复
- c#如何保存树的展开状态
- Canvas 状态的保存和恢复实例【每日一段代码25】
- delphi 保存 和 打开 TREE VIEW的节点已经展开的状态
- 你应该知道的Activity状态的保存与恢复
- 带你快速玩转canvas(7)保存画笔状态和恢复画笔状态
- Canvas基础3-绘图状态的保存与恢复
- saveInstallState参数使用详解(android activity状态保存和恢复)
- jface TreeViewer 刷新后恢复之前的展开状态
- listview中的checkbox状态保存与恢复的完美方法
- 【转】android笔记--保存和恢复activity的状态数据