转自:http://sharp-coders.com/microsoft-net/c-sharp/populate-treeview-from-database-using-csharp
TreeView Control is most important and useful control. Basically TreeView control allows you to display data in hierarchical form. In this tutorial, you will learn, how TreeView Menu can be populated from databas. I’ll use User_Menu table to load data to TreeView.
1
2
3
4
5
6
7
|
CREATE
TABLE
User_Menu
(
[
MenuCode
]
[
int
]
IDENTITY
(
1
,
1
)
NOT
NULL
,
[
MenuName
]
[
varchar
]
(
100
)
NOT
NULL
,
[
ParentId
]
[
int
]
NOT
NULL
,
PRIMARY
KEY
(
MenuCode
)
)
|
1
2
3
4
5
6
7
8
9
|
public
DataTable
LoadDataTable
(
)
{
string
DataBase
=
"server=Sharp-Coders.Com\SQLEXPRESS;UID=sa;password=sa;database=MyDatabase"
;
string
query
=
"Select * from User_Menu"
;
DataTable
dataTable
=
new
DataTable
(
)
;
SqlDataAdapter
dAdapter
=
new
SqlDataAdapter
(
query
,
DataBase
)
;
dAdapter
.
Fill
(
dataTable
)
;
return
dataTable
;
}
|
Next Step is to create a method to load Data to TreeView. The logic is, you need to select Parent Records. For this purpose, set ParentId to 0, Parent records are such records that have no parent. Now apply foreach loop on Master records and load its corresponding child one by one through recursion.
loadTreeMenu method is created to load Parent Nodes and loadTreeSubMenu method is created to load corresponding child nodes.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public
TreeView
loadTreeMenu
(
TreeView
tvMenu
,
DataTable
dtMenu
)
{
if
(
dtMenu
.
Rows
.
Count
>
0
)
{
foreach
(
DataRow
menu
in
dtMenu
.
Select
(
"ParentId=0"
)
)
{
TreeNode
ParentNode
=
new
TreeNode
(
)
;
ParentNode
.
Text
=
menu
[
"MenuName"
]
.
ToString
(
)
;
tvMenu
.
Nodes
.
Add
(
ParentNode
)
;
loadTreeSubMenu
(
ref
ParentNode
,
int
.
Parse
(
menu
[
"MenuCode"
]
.
ToString
(
)
)
,
dtMenu
)
;
}
}
return
tvMenu
;
}
|
Parameters:
- TreeView placed on the form/Page
- DataTable that is loaded from Database table
In loadTreeSubMenu recursion is used to load child nodes.
1
2
3
4
5
6
7
8
9
10
11
12
|
private
void
loadTreeSubMenu
(
ref
TreeNode
ParentNode
,
int
ParentId
,
DataTable
dtMenu
)
{
DataRow
[
]
childs
=
dtMenu
.
Select
(
"ParentId='"
+
ParentId
+
"'"
)
;
foreach
(
DataRow
dRow
in
childs
)
{
TreeNode
child
=
new
TreeNode
(
)
;
child
.
Text
=
dRow
[
"MenuName"
]
.
ToString
(
)
;
ParentNode
.
Nodes
.
Add
(
child
)
;
//Recursion Call
loadTreeSubMenu
(
ref
child
,
int
.
Parse
(
dRow
[
"MenuCode"
]
.
ToString
(
)
)
,
dtMenu
)
;
}
}
|
You can call method loadTreeMenu to load Menu to TreeView .
Thats It!!!