首页 新闻 会员 周边 捐助

C# winform 数据库表生成树节点

0
悬赏园豆:20 [已解决问题] 解决于 2014-02-28 21:11

id(标识列)   deptId(varchar)   parentId(varchar)   deptName(varchar)  

1      NO1         空        湖南学院

2      NO2         NO1        软件工程系

3      NO3         NO1        信息工程系

4      NO2.1        NO2        教务处

5      NO3.1        NO3        系主任

6      NO3.2        NO3        办公室

------------------------------------------------------------------------------------、

形成树如下:

湖南学院

    软件工程系

         教务处

    信息工程系

         系主任

         办公室      

----------------------------------------------------------------

我是菜,,请问如何生成树。。。坐等。。谢谢。。   

问题补充:

deptId  与 parentId 是字符类型,我搞不来,求解。。老提示找不到根节点。

快刀客的主页 快刀客 | 初学一级 | 园豆:125
提问于:2014-02-28 17:16
< >
分享
最佳答案
0
收获园豆:20
邀月 | 高人七级 |园豆:25475 | 2014-02-28 18:23
其他回答(1)
0
 1         private DataTable dt = null;
 2         private void Form1_Load(object sender, EventArgs e)
 3         {   
 4             //加载数据表
 5             dt = DB.GetTable("select deptId,parentId,deptName from dept");
 6             dataGridView1.DataSource = dt;
 7 
 8             BindRoot();
 9         }
10         //获取根节点
11         private void BindRoot()
12         {
13             //从dt表中查询出parentId='ABC'的行
14             DataRow[] ro = dt.Select("parentId='ABC'");
15             foreach (DataRow dr in ro)
16             {
17                 //if (dr["parentId"].ToString() == "ABC")
18                 //{
19                 TreeNode node = new TreeNode();
20                 node.Tag = dr;
21                 node.Text = dr["deptName"].ToString();
22                 treeView1.Nodes.Add(node);
23                 AddChild(node);
24                 //}
25             } 
26         }
27         //绑定子节点
28         private void AddChild(TreeNode node)
29         {
30             DataRow dr2 = (DataRow)node.Tag;//获取与根节点关联的数据行
31             string pId = dr2["deptId"].ToString();//获取根节点的deptId
32 
33             //从dt表中查询出parentId=deptId的节点
34             DataRow[] rows = dt.Select("parentId='"+pId+"'");
35             if (rows.Length == 0)
36                 return;
37             foreach (DataRow drow in rows) //再次遍历,添加子节点
38             {
39                 TreeNode node3 = new TreeNode();
40                 node3.Tag = drow;
41                 node3.Text = drow["deptName"].ToString();
42                 node.Nodes.Add(node3);
43                 //递归
44                 AddChild(node3);
45             }
46         }

谢谢,搞出来了

快刀客 | 园豆:125 (初学一级) | 2014-02-28 21:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册