我想让TreeView点击一个时展开这个节点并折叠其他节点,不过当我点击子节点时,页面刷新后所有节点都折叠了,这是为什么呢?代码如下: protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
           
            if (Session["treeNode"] != null)
            {
                TreeNode expandNode = Session["treeNode"] as TreeNode;
                foreach (TreeNode tn in TreeView1.Nodes)
                {
                    if (tn.Text.Trim() == expandNode.Text.Trim())
                    {
                        tn.Expand();
                    }
                    else 
                    {
                        tn.Collapse();
                    }
                }
            }
        }
    }
    protected void TreeView1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
    {
        foreach( TreeNode tn in TreeView1.Nodes)
        {
            if (tn.Text.Trim() != e.Node.Text.Trim())
            {
              tn.Collapse();
            }
        }
        Session["treeNode"] = e.Node;
    }
    protected void TreeView1_TreeNodeCollapsed(object sender, TreeNodeEventArgs e)
    {
        Session.Remove("treeNode");
    }

解决方案 »

  1.   

    因为你在foreach里面有判断啊
                           else 
                        {
                            tn.Collapse();
                        }
      

  2.   

    这个要自己维护TreeView的状态,你根据参数找到是那个节点点击的?可以的话就把这个节点的父结点Expanded属性设置一下,点击的节点的属性设置一下就好了阿
      

  3.   

         楼上的说的有点道理!鼠标点击节点是完全可以找到那个节点的参数的。这样的话问题就可以解决了!
    但是TreeNode对象找节点是按层来找的,比如树是
       0
         1
           2
             3
             3
           4
    当我是点击节点为3的层时,程序不就有问题了!这个问题控制好就行了!