我有一个在虚拟模式下创建的Treeview,它有4个级别的节点,在页面加载根元素和第一级元素被加载,休息将基于动态使用treeFolderList_VirtualModeCreateChildren
事件加载。
这就是我目前所拥有的
protected void treeFolderList_VirtualModeCreateChildren(object source, TreeViewVirtualModeCreateChildrenEventArgs e)
{
List<TreeViewVirtualNode> children = new List<TreeViewVirtualNode>();
if (e.NodeName == null)
{
AppendChildNode(children, "root", "All Domains", false);
}
else
{
if (e.NodeName.Contains("root"))
{
PopulateChildNodes(false, children);
}
else
{
if (!(e.NodeName.StartsWith("u_")))
{
PopulateUserChildNodes(false, children, GetDomainBase(e.NodeName), e.NodeName);
}
else
{
TreeViewVirtualNode tvNode = (TreeViewVirtualNode)treeFolderList.Nodes.FindByName(e.NodeName);
TreeViewVirtualNode tvNodeParent = (TreeViewVirtualNode)tvNode.Parent;
string tvParentNodeName = tvNodeParent.Name;
PopulateUserChildNodes(true, children, GetDomainBase(tvParentNodeName), e.NodeName);
}
}
}
e.Children = children;
}
这项工作符合预期,并分别在扩展节点时创建子元素。我的问题是我有每个节点的复选框,当我重新加载/重定向到它将反映我选择的节点的页面时,我需要能够保存Treeview
。
有没有办法实现这个目标?
答案 0 :(得分:1)
有几种方法可以尝试实现这一目标:
配置ASPxTreeList.SettingsCookies 元素(可能是最简单的解决方案),特别是StoreSelection属性:
ListBox
如果SettingsCookies不起作用,请尝试使用ASPxTreeList.ClientLayout事件手动保存和恢复TreeList布局。首先定义事件处理程序:
<dvx:ASPxTreeList ... >
...
<SettingsCookies Enabled="true" StoreSelection="true" />
...
</dvx:ASPxTreeList>
并按照文档中的示例来处理此事件。这样ASPxTreeView以及ASPxGridView就会在<dvx:ASPxTreeList OnClientLayout="dvxTreeList_ClientLayout"... >
...
</dvx:ASPxTreeList>
字符串中提供节点/列格式数据,这些数据可以保存到DB然后还原回来。
将TreeView选定的节点键存储在Session中,并使用回调来恢复它们:
示例:ASPxTreeList - How to store the selection between requests
我个人不会依赖cookie,而是首先尝试方法#2和#3。 #2对我来说非常适合使用ASPxGridView和我们在复杂的ASPxTreeView设置中使用的#3,它还跟踪隐藏节点的选择。
我希望链接文档中的示例应该足够简单,您可以复制和修改。如果没有,请评论哪些不适合您。
HTH