C# 数据库表递归生成树

问题:

表如下:

第一次使用递归,请教了许多人,谢谢他们的指点。

代码如下:

        private DataTable dt = null;
        private void Form1_Load(object sender, EventArgs e)
        {   
            //加载数据表
            dt = DB.GetTable("select deptId,parentId,deptName from dept");
            dataGridView1.DataSource = dt;

            BindRoot();
        }
        //获取根节点
        private void BindRoot()
        {
            //从dt表中查询出parentId='ABC'的行
            DataRow[] ro = dt.Select("parentId='ABC'");
            foreach (DataRow dr in ro)
            {
                //if (dr["parentId"].ToString() == "ABC")
                //{
                TreeNode node = new TreeNode();
                node.Tag = dr;
                node.Text = dr["deptName"].ToString();
                treeView1.Nodes.Add(node);
                AddChild(node);
                //}
            } 
        }
        //绑定子节点
        private void AddChild(TreeNode node)
        {
            DataRow dr2 = (DataRow)node.Tag;//获取与根节点关联的数据行
            string pId = dr2["deptId"].ToString();//获取根节点的deptId

            //从dt表中查询出parentId=deptId的节点
            DataRow[] rows = dt.Select("parentId='"+pId+"'");
            if (rows.Length == 0)
                return;
            foreach (DataRow drow in rows) //再次遍历,添加子节点
            {
                TreeNode node3 = new TreeNode();
                node3.Tag = drow;
                node3.Text = drow["deptName"].ToString();
                node.Nodes.Add(node3);
                //递归
                AddChild(node3);
            }
        }

  最终结果,左图:

posted on 2014-02-28 21:18  快刀客  阅读(2548)  评论(0编辑  收藏  举报