Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#树视图状态扩展_C#_Asp.net_Treeview - Fatal编程技术网

C#树视图状态扩展

C#树视图状态扩展,c#,asp.net,treeview,C#,Asp.net,Treeview,我的主页上有一个树状视图。加载contentpage时,我希望保存treeview状态(折叠/展开哪些节点)。我将节点存储在ArrayList中。代码: private void SaveTreeviewState(TreeNodeCollection nodes) { foreach (TreeNode t in nodes) { // Store expandable state in ArrayList (true or false) //N

我的主页上有一个树状视图。加载contentpage时,我希望保存treeview状态(折叠/展开哪些节点)。我将节点存储在ArrayList中。代码:

private void SaveTreeviewState(TreeNodeCollection nodes)
{
    foreach (TreeNode t in nodes)
    {
        // Store expandable state in ArrayList (true or false)
        //NodePaths.Add(t.Expanded);
        NodePaths.Add(t);

        // Check for childnods
        if (t.ChildNodes.Count > 0)
            // recall this method
            SaveTreeviewState(t.ChildNodes);

    }
}
此方法由treeview对象的卸载事件调用:

protected void tvManual_Unload(object sender, EventArgs e)
{
    SaveTreeviewState(tvManual.Nodes);

    // Clear session
    Session["Treeview"] = null;

    // Add arraylistm to session
    Session["Treeview"] = NodePaths;

}
在母版页的加载事件中,我检查会话是否已设置。设置会话后,我调用读取会话的方法

会话中的arraylist包含所有my节点,因此这是正确的。但是,所有节点的扩展属性都设置为false。这是不正确的,因为我扩展了多个节点

希望你们能理解我的问题,帮我解决


Thnx在advanced中

因为保存的列表实际上是一个对象列表(TreeNode对象),所以您实际上是在存储对对象的引用。我猜在TVU上,扩展状态正在改变或类似的事情。您可能正在使用进程内会话,这类似于对对象进行引用(没有序列化),因此对对象属性的任何更改对存储在会话中的对象也是可见的


通过将值存储到会话中,可以避免这种副作用。例如,存储一个字典,其中键将包含节点路径,值将包含展开状态

我现在存储值而不是对象:NodePaths.Add(t.Expanded);这没用。所有的值都是假的。当您使用NodePath.add(t.Expanded)添加值时,您确定这些值是正确的吗?如果它们是值类型,那么一旦存储在会话中就要更改它们是没有意义的。正确的值是什么意思?当我在母版页上展开treenodes时,我知道expanded必须为true。但是如果您打印(或在调试器中看到)所有值,而实际将它们与NodePath一起存储。Add(t.expanded)是否正确?(你期望的那样扩展是真的吗?)不,这是我的问题。默认情况下,我的树视图是折叠的。当我展开一些节点并触发卸载事件时,所有节点的“展开”属性都设置为false。所以我的数组节点路径只包含假值。。。