用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
/// #region /// <summary>
18
/**//// 必需的设计器变量。
19
/// </summary>
20
private System.ComponentModel.Container components = null;
21
public Form1()
22
{
23
//
24
// Windows 窗体设计器支持所必需的
25
//
26
InitializeComponent();
27
28
//
29
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
30
//
31
}
32
33
/**//// <summary>
34
/// 清理所有正在使用的资源。
35
/// </summary>
36
protected override void Dispose( bool disposing )
37
{
38
if( disposing )
39
{
40
if (components != null)
41
{
42
components.Dispose();
43
}
44
}
45
base.Dispose( disposing );
46
}
47
48
Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码
49
/**//// <summary>
50
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
51
/// 此方法的内容。
52
/// </summary>
53
private void InitializeComponent()
54
{
55
this.treeView1 = new System.Windows.Forms.TreeView();
56
this.SuspendLayout();
57
//
58
// treeView1
59
//
60
this.treeView1.ImageIndex = -1;
61
this.treeView1.Location = new System.Drawing.Point(0, 0);
62
this.treeView1.Name = "treeView1";
63
this.treeView1.SelectedImageIndex = -1;
64
this.treeView1.Size = new System.Drawing.Size(400, 440);
65
this.treeView1.TabIndex = 0;
66
//
67
// Form1
68
//
69
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
70
this.ClientSize = new System.Drawing.Size(616, 445);
71
this.Controls.Add(this.treeView1);
72
this.Name = "Form1";
73
this.Text = "Form1";
74
this.Load += new System.EventHandler(this.Form1_Load);
75
this.ResumeLayout(false);
76
77
}
78
#endregion
79
80
/**//// <summary>
81
/// 应用程序的主入口点。
82
/// </summary>
83
[STAThread]
84
static void Main()
85
{
86
Application.Run(new Form1());
87
}
88
#endregion
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
}