如何在Devexpress虚拟树视图中维护项目的检查状态



我在虚拟模式下创建了一个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

有办法做到这一点吗?

有几种方法可以实现这一点:

  1. 配置ASPxTreeList.SettingsCookies元素(可能是最简单的解决方案),特别是StoreSelection属性:

    <dvx:ASPxTreeList ... >
    ...
    <SettingsCookies Enabled="true" StoreSelection="true"  />
    ...
    </dvx:ASPxTreeList>
    
  2. 如果SettingsCookies不起作用,请尝试使用ASPxTreeList.ClientLayout事件手动保存和恢复TreeList布局。首先定义事件处理程序:

    <dvx:ASPxTreeList OnClientLayout="dvxTreeList_ClientLayout"... >
    ...
    </dvx:ASPxTreeList>
    

    并按照文档中的示例处理此事件。通过这种方式,ASPxTreeView和ASPxGridView在e.LayoutData字符串中提供节点/列格式的数据,这些数据可以保存到DB中,然后还原回来。

  3. 将TreeView选定的节点密钥存储在会话中,并使用回调恢复它们:

    示例:ASPxTreeList-如何存储请求之间的选择

我个人不会依赖cookie,会先尝试方法#2和#3#2在ASPxGridView和#3中运行得很好,我们在复杂的ASPxTreeView设置中使用它,它还跟踪隐藏节点的选择。

我希望链接文档中的示例应该足够容易,以便您复制和修改。如果没有,请评论什么对你不起作用。

HTH-

相关内容

  • 没有找到相关文章

最新更新