递归方式实现树的展示形式

1.模拟出数据

 1 private DataTable CreateDataTable()
 2         {
 3             DataTable table = new DataTable();
 4             DataColumn column1 = new DataColumn("Id", typeof(string));
 5             DataColumn column2 = new DataColumn("Text", typeof(String));
 6             DataColumn column3 = new DataColumn("ParentId", typeof(string));
 7             table.Columns.Add(column1);
 8             table.Columns.Add(column2);
 9             table.Columns.Add(column3);
10 
11             DataRow row = table.NewRow();
12             row[0] = "china";
13             row[1] = "中国";
14             row[2] = DBNull.Value;
15             table.Rows.Add(row);
16 
17             row = table.NewRow();
18             row[0] = "henan";
19             row[1] = "河南省";
20             row[2] = "china";
21             table.Rows.Add(row);
22 
23             row = table.NewRow();
24             row[0] = "zhumadian";
25             row[1] = "驻马店市";
26             row[2] = "henan";
27             table.Rows.Add(row);
28 
29             row = table.NewRow();
30             row[0] = "luohe";
31             row[1] = "漯河市";
32             row[2] = "henan";
33             table.Rows.Add(row);
34 
35             row = table.NewRow();
36             row[0] = "anhui";
37             row[1] = "安徽省";
38             row[2] = "china";
39             table.Rows.Add(row);
40 
41             row = table.NewRow();
42             row[0] = "hefei";
43             row[1] = "合肥市";
44             row[2] = "anhui";
45             table.Rows.Add(row);
46 
47             row = table.NewRow();
48             row[0] = "golden";
49             row[1] = "金色池塘小区";
50             row[2] = "hefei";
51             table.Rows.Add(row);
52 
53             row = table.NewRow();
54             row[0] = "ustc";
55             row[1] = "中国科学技术大学";
56             row[2] = "hefei";
57             table.Rows.Add(row);
58 
59             return table;
60         }
View Code

2.添加树的数据

 1 private void LoadData()
 2         {
 3             // 模拟从数据库返回数据表
 4             DataTable table = CreateDataTable();
 5             DataSet ds = new DataSet();
 6             ds.Tables.Add(table);
 7             ds.Relations.Add("TreeRelation", ds.Tables[0].Columns["Id"], ds.Tables[0].Columns["ParentId"]);
 8 
 9             foreach (DataRow row in ds.Tables[0].Rows)
10             {
11                 if (row.IsNull("ParentId"))
12                 {
13                     TreeNode node = new TreeNode();
14                     node.Text = row["Text"].ToString();
15                     node.Expanded = true;
16                     tree.Nodes.Add(node);
17                     ResolveSubTree(row, node);
18                 }
19             }
20         }
View Code

3.递归实现无限极添加

 1 private void ResolveSubTree(DataRow dataRow, TreeNode treeNode)
 2         {
 3             DataRow[] rows = dataRow.GetChildRows("TreeRelation");
 4             if (rows.Length > 0)
 5             {
 6                 treeNode.Expanded = true;
 7                 foreach (DataRow row in rows)
 8                 {
 9                     TreeNode node = new TreeNode();
10                     node.Text = row["Text"].ToString();
11                     treeNode.ChildNodes.Add(node);
12                     ResolveSubTree(row, node);
13                 }
14             }
15         }
View Code
原文地址:https://www.cnblogs.com/shinelhui/p/3810967.html