现在我有一个list1:里面存有树的头结点的名称:比如存有“1”,“2”,“3”...;
有一个getChildren(string name)方法,比如通过getChildren(1) 能够返回一个list3:存有1下面的子节点:4,5....
如此类推,没有则返回空。现在我要将他们在treeview中显示出来 还请指教??

解决方案 »

  1.   


    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Windows.Forms;
    using System.Text;namespace 企业人事管理系统
    {
        class Public_Fun
        {
            #region[公共变量] 
            DataSet DS;
            DataTable DT;
            SQL_Link Link = new SQL_Link();
            bool Tree_Node_P = false;
            #endregion        #region[函数] [TreeView递归函数] 
    软件开发网
            #region [函数] [树型2级显示]
            public void Fun_Tree(TreeView TREE,SqlConnection Link_Conn)
            {
                DS = Link.SQL_Select("select * from Basic_Bm", Link_Conn);
                DT = DS.Tables[0]; 
                if (Tree_Node_P == false)
                {
                    foreach (DataRow DR in DT.Rows)
                    {
                        if (DR.ItemArray[1].ToString() == "0") 
                        {
                            TreeNode TN = new TreeNode();
                            TN.Text = DR.ItemArray[0].ToString();
                            TREE.Nodes.Add(TN);
                        } 
    http://www.mscto.com                }
                    Tree_Node_P = true;
                }            foreach (DataRow DR_2 in DT.Rows)
                {
                    foreach (TreeNode TN_2 in TREE.Nodes) 
    软件开发网
                    {
                        if (DR_2.ItemArray[1].ToString() == TN_2.Text)
                        {
                            TreeNode TN_3 = new TreeNode();
                            TN_3.Text = DR_2.ItemArray[0].ToString();                         TN_2.Nodes.Add(TN_3);
                            Fun_Tree_2(TN_3);
                        }
                    }
                }
            }
            #endregion        #region [函数] [树型>3级递归] 
            public void Fun_Tree_2(TreeNode T_Name)
            {
                foreach (DataRow DR_2 in DT.Rows)
                {
                    if (DR_2.ItemArray[1].ToString() == T_Name.Text) 
                    {
                        TreeNode TN_3 = new TreeNode();
                        TN_3.Text = DR_2.ItemArray[0].ToString();
                        T_Name.Nodes.Add(TN_3);
                        Fun_Tree_2(TN_3); 
                    }
                }
            }
            #endregion        #endregion
        }
    }
      

  2.   

    通过以下方法来找节点private TreeNode FindNode(TreeNode tnParent, string strValue)//tnParent是根节点,strValue是所要找的节点的tag属性,可以换成其他属性
            {
                if (tnParent == null) return null;
                if (tnParent.Tag.ToString() == strValue) return tnParent;//找到节点            TreeNode tnRet = null;
                foreach (TreeNode tn in tnParent.Nodes)//继续遍历
                {
                    tnRet = FindNode(tn, strValue);
                    if (tnRet != null) break;
                }
                return tnRet;
            }
    TreeNode node = FindNode(treeViewFolder.Nodes[0],fatherName);//找父节点
                        if (node != null)
                        {
                            node.Nodes.Add(childNode);在父节点下添加子节点
                        }
      

  3.   

    我这段代码对楼主应该有帮助,可以统计子节点数
    表treeTest有3列 
    节点名“nodeName”,节点ID“ID”,父节点ID“parentNodeID”递归绑定树结构: using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Text; 
    using System.Windows.Forms; 
    using System.Data.SqlClient; namespace 我的树结构 

        public partial class Form1 : Form 
        { 
            public Form1() 
            { 
                InitializeComponent(); 
            }         private void Form1_Load(object sender, EventArgs e) 
            { 
                bindTree(); 
            } 
            IList <classTree> ListTree;//全局变量,classTree为实体类 
            private void bindTree() 
            { 
                SqlConnection con = new SqlConnection("server=.;database=DBzealot;integrated security=SSPI;"); 
                SqlCommand cmb = new SqlCommand("select *from treeTest", con); 
                SqlDataReader reader; 
                con.Open(); 
                reader = cmb.ExecuteReader(); 
                ListTree = new List <classTree>(); 
                while (reader.Read()) 
                { 
                    classTree csTree = new classTree(); 
                    csTree.ID = (int)reader["ID"]; 
                    csTree.Name = (string)reader["nodeName"]; 
                    if (reader["parentNodeID"] != DBNull.Value) 
                    { 
                        csTree.ParenID = (int)reader["parentNodeID"]; 
                    } 
                    ListTree.Add(csTree); 
                } 
                con.Close(); 
                int i; 
                for (i = 0; i < ListTree.Count; i++) 
                { 
                    if (ListTree[i].ParenID == 0) 
                    { 
                        TreeNode rootNode = new TreeNode(); 
                        rootNode.Text = ListTree[i].Name + ",子节点数:0";//默认的子节点数量为0 
                        rootNode.Tag = ListTree[i]; 
                        treeView1.Nodes.Add(rootNode); 
                        addNodes(rootNode);//调用递归方法 
                    } 
                }        
            } 
            private int addNodes(TreeNode node)//参数为父节点 
            { 
                int count = 0; 
                int childCount = 0; 
                classTree csTr = (classTree)node.Tag;             for (int i = 0; i < ListTree.Count; i++) 
                { 
                    if (csTr.ID == ListTree[i].ParenID) 
                    { 
                        ++count;                                    
                        TreeNode childNode = new TreeNode(); 
                        childNode.Text = ListTree[i].Name + ",子节点数:0"; 
                        childNode.Tag = ListTree[i]; 
                        node.Nodes.Add(childNode);//添加子节点 
                        childCount+=addNodes(childNode);//在这里递归,返回子节点的所有子节点数量 
                    }                
                } 
                node.Text = csTr.Name + ",子节点数:" + Convert.ToString(childCount + count);//给父节点赋值 
                csTr.KidCount = childCount + count; 
                node.Tag = csTr; 
                return childCount + count;//返回父节点的所有子节点数量 
            }         private void button1_Click(object sender, EventArgs e) 
            { 
                if (treeView1.SelectedNode != null) 
                { 
                    classTree tree = (classTree)treeView1.SelectedNode.Tag; 
                    MessageBox.Show(tree.Name + ":子节点数为" + tree.KidCount.ToString(), "我的树结构"); 
                    return; 
                } 
                MessageBox.Show("请选中一个节点", "我的树结构"); 
            }     } 

      

  4.   

                public void BuildTreeView(ArrayList a, ref TreeNode root)
                {
                    if(root == null)
                        throw new Exception("Root can not be null");
                    foreach (object obj in a)
                    {
                        TreeNode node = new TreeNode(a.ToString());
                        root.Nodes.Add(node);
                        ArrayList children = getChildren(a.ToString());
                        BuildTreeView(children, ref node);//加子节点
                    }
                }
      

  5.   

    treeview的递归算法和数据库设计几乎都是盖棺论定的