在网上看到一个问题:
----------------------------------
  比如我想建一个层数是3的树  
   
  建立到第3层之后  
   
  如果用户要再建立下一层  
   
  就提示不能建立了   
---------------------------------
请各位高手帮忙看一下~

解决方案 »

  1.   

    node.Depth > 3 //node为当前选中节点
      

  2.   

    不是这样控制?geng.PopulateOnDemand = false;在第三层中控制后面层就无法添加了啊
      

  3.   

    好的,我也是做测试用的代码:
    if (!Page.IsPostBack)
            {
                //TreeView1.Nodes.Clear();
                TreeNode nNode = new TreeNode("在职");
                TreeNode pNode = new TreeNode("离职");
                TreeView1.Nodes.Add(nNode);
                TreeView1.Nodes.Add(pNode);
            }    }
        protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
        {
            if (e.Node.ChildNodes.Count == 0) 
            {
                if (e.Node.Depth == 0)
                { tiancong_geng(e.Node); }
                else if (e.Node.Depth == 1)
                { tiancong_ye(e.Node); }
                /*else if (e.Node.Depth == 2)
                { tiancong_ye1(e.Node); }
                else if (e.Node.Depth == 3)
                { tiancong_ye2(e.Node); }*/
            }
        }    void tiancong_geng(TreeNode Node)
        {        Socut.Reader MinCheng = new Socut.Reader("SELECT * FROM ZIYUAN order by ID asc");
            while (MinCheng.Read())
            {
                bool KG = false;
                TreeNode geng = new TreeNode(MinCheng["QUYU"].ToString());
                geng.PopulateOnDemand = true;
                geng.SelectAction = TreeNodeSelectAction.Expand;
                int a = Node.ChildNodes.Count;
                if (a > 0)
                {
                    for (int jie = 0; jie < a; jie++)
                    {
                        if (Node.ChildNodes[jie].Text == MinCheng["QUYU"].ToString())
                        { KG = true; break; }
                    }
                    if (KG == false) { Node.ChildNodes.Add(geng); }
                }
                else { Node.ChildNodes.Add(geng); }        }
            MinCheng.Close();    }    void tiancong_ye(TreeNode Node)
        {
            Socut.Reader MinCheng = new Socut.Reader("SELECT * FROM ZIYUAN order by ID asc");
            while (MinCheng.Read())
            {
                TreeNode geng = new TreeNode(MinCheng["JIFAN"].ToString(), "", MinCheng["JIFAN"].ToString());
                geng.PopulateOnDemand = true;//false
                geng.SelectAction = TreeNodeSelectAction.None;            if (Node.Text == MinCheng["QUYU"].ToString())
                { Node.ChildNodes.Add(geng); }        }
            MinCheng.Close();
        }    void tiancong_ye1(TreeNode Node)
        {
            Socut.Reader MinCheng = new Socut.Reader("SELECT * FROM ZIYUAN");
            while (MinCheng.Read())
            {
                TreeNode geng = new TreeNode(MinCheng["JIFAN"].ToString(), MinCheng["JIFAN"].ToString());
                geng.PopulateOnDemand = false;//true
                geng.SelectAction = TreeNodeSelectAction.None;
                Node.ChildNodes.Add(geng);
            }
            MinCheng.Close();    }    void tiancong_ye2(TreeNode Node)
        {
            Socut.Reader MinCheng = new Socut.Reader("SELECT * FROM Xian");
            while (MinCheng.Read())
            {
                TreeNode geng = new TreeNode(MinCheng["Cheng"].ToString(), MinCheng["Ren"].ToString());
                geng.PopulateOnDemand = false;
                geng.SelectAction = TreeNodeSelectAction.None;
                Node.ChildNodes.Add(geng);
            }
            MinCheng.Close();    }
      

  4.   

    node.PopulateOnDemand = false;
    其中node为当前节点,这句话的意思是点击当前节点不载入下一级节点;在做treeview异步加载时经常用到PopulateOnDemand。
      

  5.   


    谢谢,我在前台放了TreeView,通过点击节点,就可以在它下面实现添加子节点,现在可以无限的添加子节点,
    怎么检查用户的输入是第三层然后给出提示呢?
      

  6.   

    protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e) 
        { 
            if (e.Node.ChildNodes.Count == 0) 
            { 
                if (e.Node.Depth == 0) 
                { tiancong_geng(e.Node); } 
                else if (e.Node.Depth == 1) 
                { tiancong_ye(e.Node); } 
                else if (e.Node.Depth == 2) 
                { tiancong_ye1(e.Node); } 
                else if (e.Node.Depth == 3) 
                { tiancong_ye2(e.Node); } 
            } 
        } 
    不是?
    或把你的代码贴出来看看