C# 用数据库记录填充树
生活随笔
收集整理的這篇文章主要介紹了
C# 用数据库记录填充树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
在項目開發的過程中,樹狀結構用的很多,樹結構不但能夠很好的分類匯總,而且還能明確層次關系,方便操作
這里寫一個簡單的C#填充數的程序,一般要填充樹狀結構就會用遞歸的方法
先看數據庫表結構:
?
?
?
parentID為改name的父節點id
?
C#代碼:
?
?1??private?void?button1_Click(object?sender,?EventArgs?e)?2?????????{
?3?????????????DataSet?ds?=?GetData();
?4?????????????if?(ds.Tables.Count?<=?0)?return;
?5?????????????NodeAdd(treeView1,?ds.Tables[0],?true);
?6?????????}
?7?
?8?????????private?static?DataSet?GetData()
?9?????????{
10?????????????using?(SqlConnection?con?=?new?SqlConnection("data?source=.;initial?catalog=Test;user?id=sa"))
11?????????????{
12?????????????????con.Open();
13?????????????????SqlCommand?cmd?=?new?SqlCommand("select?*?from?Student",?con);
14?????????????????SqlDataAdapter?adapter?=?new?SqlDataAdapter(cmd);
15?????????????????DataSet?ds?=?new?DataSet();
16?????????????????adapter.Fill(ds);
17?????????????????return?ds;
18?????????????}
19?????????}
20?
21?????????//填充數
22?????????private?static?void?NodeAdd(TreeView?tree,?DataTable?table,?bool?expandall)
23?????????{
24?????????????foreach?(DataRow?row?in?table.Rows)
25?????????????{
26?????????????????string?id?=?row["id"].ToString().Trim();
27?????????????????string?name?=?row["name"].ToString().Trim();
28?????????????????string?parentID?=?row["parentID"].ToString().Trim();
29?
30?????????????????TreeNode?node?=?new?TreeNode(name);
31?????????????????node.Tag?=?id;
32?????????????????//在樹中根據id來查找這個節點,如果沒有找到,則說明這個節點是父節點,如果查找到這個節點,則返回,返回的節點為node節點的父節點
33?????????????????TreeNode?parentNode?=?GetNodeByID(tree,parentID);
34?????????????????if?(parentNode?==?null)
35?????????????????{
36?????????????????????tree.Nodes.Add(node);
37?????????????????}
38?????????????????else??//如果不為空,則說明當前的節點為返回節點(parentNode)的子節點
39?????????????????{
40?????????????????????parentNode.Nodes.Add(node);
41?????????????????}
42?????????????????if?(expandall)
43?????????????????{
44?????????????????????tree.ExpandAll();
45?????????????????}
46?????????????}
47?????????}
48?
49?????????private?static?TreeNode?GetNodeByID(TreeView?tree,?string?id)
50?????????{
51?????????????TreeNode?result?=?null;
52?????????????foreach?(TreeNode?node?in?tree.Nodes)
53?????????????{
54?????????????????if?(node.Tag.ToString()?==?id)
55?????????????????{
56?????????????????????result?=?node;
57?????????????????????break;
58?????????????????}
59?????????????????//判斷當前節點是不是要查找的節點,如果不是,則查看當前節點是否有子節點,然后遞歸判斷
60?????????????????if?(node.Nodes.Count?>?0)
61?????????????????{
62?????????????????????result?=?GetNodeByID(node,?id);
63?????????????????????if?(result?!=?null)
64?????????????????????????break;
65?????????????????}
66?????????????}
67?????????????return?result;
68?????????}
69?
70?????????private?static?TreeNode?GetNodeByID(TreeNode?parentNode,?string?id)
71?????????{
72?????????????TreeNode?result?=?null;
73?????????????foreach?(TreeNode?node?in?parentNode.Nodes)
74?????????????{
75?????????????????if?(node.Tag.ToString()?==?id)
76?????????????????{
77?????????????????????result?=?node;
78?????????????????????break;
79?????????????????}
80?
81?????????????????if?(node.Nodes.Count?>?0)
82?????????????????{
83?????????????????????result?=?GetNodeByID(node,?id);
84?????????????????????if?(result?!=?null)
85?????????????????????????break;
86?????????????????}
87?????????????}
88?????????????return?result;
89?????????}
?
?
最后運行結果:
?
?
?
轉載于:https://www.cnblogs.com/wangshuai/archive/2010/07/21/1782522.html
總結
以上是生活随笔為你收集整理的C# 用数据库记录填充树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC调用外部程序接口
- 下一篇: capistrano部署ruby on