我在虚拟模式下创建了一个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
。
有办法做到这一点吗?
有几种方法可以实现这一点:
-
配置ASPxTreeList.SettingsCookies元素(可能是最简单的解决方案),特别是StoreSelection属性:
<dvx:ASPxTreeList ... > ... <SettingsCookies Enabled="true" StoreSelection="true" /> ... </dvx:ASPxTreeList>
-
如果SettingsCookies不起作用,请尝试使用ASPxTreeList.ClientLayout事件手动保存和恢复TreeList布局。首先定义事件处理程序:
<dvx:ASPxTreeList OnClientLayout="dvxTreeList_ClientLayout"... > ... </dvx:ASPxTreeList>
并按照文档中的示例处理此事件。通过这种方式,ASPxTreeView和ASPxGridView在
e.LayoutData
字符串中提供节点/列格式的数据,这些数据可以保存到DB中,然后还原回来。 -
将TreeView选定的节点密钥存储在会话中,并使用回调恢复它们:
示例:ASPxTreeList-如何存储请求之间的选择
我个人不会依赖cookie,会先尝试方法#2和#3#2在ASPxGridView和#3中运行得很好,我们在复杂的ASPxTreeView设置中使用它,它还跟踪隐藏节点的选择。
我希望链接文档中的示例应该足够容易,以便您复制和修改。如果没有,请评论什么对你不起作用。
HTH-