用TreeView控件显示数据库中数据,有时用递归法是比较理想的选择,下面通过一个例子来说明一下递归法的简单应用


1
using System;
2
using System.Drawing;
3
using System.Collections;
4
using System.ComponentModel;
5
using System.Windows.Forms;
6
using System.Data;
7
using System.Data.OleDb;
8
namespace treeview
9
{
10
/// <summary>
11
/// Form1 的摘要说明。
12
/// </summary>
13
public class Form1 : System.Windows.Forms.Form
14
{
15
private System.Windows.Forms.TreeView treeView1;
16
public DataSet ds=null;
17
///
89
90
private void Form1_Load(object sender, System.EventArgs e)
91
{
92
93
OleDbConnection con=new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Application.StartupPath+"\\n.mdb");
94
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM ttt", con);
95
ds= new DataSet();
96
da.Fill(ds);
97
//调用递归函数,完成树形结构的生成
98
AddTree("0",(TreeNode)null);
99
}
100
// 递归添加树的节点
101
public void AddTree(string ParentID,TreeNode pNode)
102
{
103
DataView dvTree = new DataView(ds.Tables[0]);
104
//过滤ParentID,得到当前的所有子节点
105
dvTree.RowFilter= "[ParentID]='"+ParentID+"'";
106
foreach(DataRowView Row in dvTree)
107
{
108
TreeNode Node=new TreeNode() ;
109
if(pNode==null)
110
{
111
//'?添加根节点
112
Node.Text =Row["Content"].ToString();
113
this.treeView1.Nodes.Add(Node);
114
AddTree(Row["ID"].ToString(),Node); //再次递归
115
}
116
else
117
{
118
//添加当前节点的子节点
119
Node.Text = Row["Content"].ToString();
120
pNode.Nodes.Add(Node);
121
pNode.Expand();
122
AddTree(Row["ID"].ToString(),Node); //再次递归
123
}
124
}
125
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125
