如何在 Devexpress Virtual Treeview 中维护项目的检查状态?

How to maintain checkstate of items in Devexpress Virtual Treeview?

我有一个在虚拟模式下创建的 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 当我 reload/redirect 到页面时它会反映我选择的节点。

有办法实现吗?

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

  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 字符串中提供 node/column 格式的数据,可以将其保存到数据库中,然后再恢复回来。

  3. 将 TreeView 选定的节点键存储在 Session 中并使用回调恢复它们:

    示例:ASPxTreeList - How to store the selection between requests

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

我希望链接文档中的示例足够容易让您复制和修改。如果不是,请评论什么不适合你。

HTH