如何动态的指定展开到第几级?
比如我有个文本框,一个按钮,一棵树,我在文本框中输入2,点击按钮就展开树到第二级,输入3,点按钮就展开到第三级,怎么做?

解决方案 »

  1.   

    treeview.StaticDisplayLevels = int.parse(textbox1.text.trim());
      

  2.   

    大体如下 
    private void ExTreeByLever(TreeNode tn  ,int lever)
            {
                foreach (TreeNode sub in tn.Nodes)
                {
                    tn.Expand();
                    if (tn.Level < lever)
                    {
                        ExTreeByLever(tn, lever);
                    }
                }
            }
      

  3.   

    貌似不行啊:CS0117: “System.Web.UI.WebControls.TreeView”并不包含“StaticDisplayLevels”的定义能说一下怎么用吗?
      

  4.   

    CS0117: “System.Web.UI.WebControls.TreeNode”并不包含“Level”的定义
      

  5.   

    自己写个方法获取节点的lever吧 俺弄winform的 
      

  6.   

    zhchg6666 ,你的方法不太好使.
      

  7.   

    zhchg6666 ,你的方法我改了改,能实现向下展开的了,也就是输入2,展开到了第二级,再输入3,展开到了第三级,但是再输入2,就无法收起到第二级,因为只是写了sub.Expand();只能向下展开,不能向上收起.
    改的代码如下:
        
        private void ExTreeByLever(TreeNode tn, int lever)
        {
            foreach (TreeNode sub in tn.ChildNodes)
            {
                if (sub.Depth < lever)
                {
                    sub.Expand();
                } 
                ExTreeByLever(sub, lever);
            }
        }    //调用:
        ExTreeByLever(this.TreeView1.Nodes[0], int.Parse(this.iptDepth.Value.Trim()));
      

  8.   

    搞定!马上结贴!    private void ExTreeByLever(TreeNode tn, int lever)
        {
            foreach (TreeNode sub in tn.ChildNodes)
            {
                if (sub.Depth < lever)
                {
                    sub.Expand();
                }
                else
                {
                    sub.ToggleExpandState();
                }
                ExTreeByLever(sub, lever);
            }
        }    //调用:
        ExTreeByLever(this.TreeView1.Nodes[0], int.Parse(this.iptDepth.Value.Trim()));
      

  9.   

    这应该是你要求的!记得给分鼓励一下.
        protected void Button1_Click(object sender, EventArgs e)
        {
            int i = Convert.ToInt32(TextBox2.Text);
            int dth = 0;            foreach (TreeNode TN in TreeView2.Nodes)
                {
                    if (dth < i)
                    {
                        TN.Expand();
                        TreeNodeExpand(TN, i);
                    }
                    else
                    {
                        TN.Expanded = false;
                        TreeNodeExpand(TN, i);
                    }
                                  
                }                
        }    public void TreeNodeExpand(TreeNode TreeN,int dth)
        {            foreach (TreeNode no in TreeN.ChildNodes)
                {
                    if (no.Depth < dth)
                    {
                        no.Expand();
                        TreeNodeExpand(no, dth);
                    }
                    else
                    {
                        no.Expanded = false;
                        TreeNodeExpand(no, dth);
                    }
                }    }
      

  10.   

    lonelygames 的代码又启发了我"no.Expanded = false; ";
    ToggleExpandState()这个只是切换节点的展开和折叠状态,并不是折叠节点.修改如下:    private void ExTreeByLever(TreeNode tn, int lever)
        {
            foreach (TreeNode sub in tn.ChildNodes)
            {
                if (sub.Depth < lever)
                {
                    sub.Expand();
                }
                else
                {
                    sub.Expanded = false;
                }
                ExTreeByLever(sub, lever);
            }
        }    //调用:
        ExTreeByLever(this.TreeView1.Nodes[0], int.Parse(this.iptDepth.Value.Trim()));
    感谢lonelygames!