TreeView控件保存恢复结点展开状态
帮助TreeView保存和恢复结点展开状态的辅助类
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI.WebControls;
///
///
Heros TreeView保存和恢复结点展开状态的辅助类
///
public class
TreeNodesExpandStateManager : IDisposable
{
TreeView _tree;
List
<
TreeNode
>
nodes
= new
List
<
TreeNode
>
();
public static string
SessionKey
= "
TreeNodesExpandState
"
;
public
TreeNodesExpandStateManager(TreeView tree)
{
_tree
=
tree;
}
///
///
保存当前树的展开状态
///
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);
}
}
}
}
///
///
恢复当前树的展开状态
///
public void
RestoreExpandState()
{
foreach
(TreeNode node
in this
._tree.Nodes)
{
SetNodeExpandState(node);
}
}
///
///
用于跨页操作时,恢复到指定树
///
///
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);
}
}
}
}
///
///
将指定树展开状态存入会话,一般在树的展开和合闭事件中调用
///
///
目标树
public static void
SaveExpandStateInSession(TreeView tree,
string
sessionKey)
{
if
(tree
== null
)
return
;
TreeNodesExpandStateManager manager
= new
TreeNodesExpandStateManager(tree);
manager.SaveExpandState();
HttpContext.Current.Session[sessionKey]
=
manager;
}
///
///
将指定树展开状态存入默认会话,一般在树的展开和合闭事件中调用
///
///
目标树
public static void
SaveExpandStateInSession(TreeView tree)
{
SaveExpandStateInSession(tree, SessionKey);
}
///
///
将Session中的结点展开状态恢复到指定树,在树结点添加结束后调用
///
///
目标树
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);
}
///
///
将默认Session中的结点展开状态恢复到指定树,在树结点添加结束后调用
///
/// 【TreeView控件保存恢复结点展开状态】
目标树
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
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
}
}
推荐阅读
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- 失手忘记保存,亦不想再写第二遍。
- 1.前端引入jeDate日期控件
- 控件介绍
- 前端页面表格控件handsontable在vue项目中的应用
- python对数据进行分类|python对数据进行分类、文件是csv文件_用Python将处理数据得到的csv文件分类(按顺序)保存...
- 人脸识别|【人脸识别系列】| 实现人脸截图保存并编写128维特征向量
- 【爱健康】|【爱健康】 41 保存唾液就是保护你的肾
- 【转】FFmpeg最简单的解码保存YUV数据
- iOS|iOS UI控件埋点技术方案之基于runtime hook