




















今天公司没什么事做,就写了个树菜单的DEMO,以前都是用循环进行邦定的,由于,不能无限的添加菜单,所以,就重新写了一个,用递归的方式。
下以是据体的操作步骤:
数据库设计:
CREATE TABLE [dbo].[Tbl_Menu](
[menu_id] [int] IDENTITY(1,1) NOT NULL,//id
[menu_pid] [int] NULL,--------------------父ID
[menu_name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,---------名子
[menu_desc] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,--------描述
[menu_orderId] [int] NULL,---------排序ID
[menu_level] [int] NULL,------------菜单所在层次
[menu_createTime] [datetime] NULL-------时间
) ON [PRIMARY]
程序代码:
1
protected void Page_Load(object sender, EventArgs e)
2
{
3
PageDataBind_Menu();
4
}
5
6
private void PageDataBind_Menu()
7
{
8
string strSql = "select * from dbo.Tbl_Menu ";
9
DataTable dt = SqlHelper.ExecuteDataset(ConnectionStringManager.ConnectionStringRead, CommandType.Text, strSql).Tables[0];
10
11
12
dt.DefaultView.RowFilter = "menu_pid=0";
13
14
for (int i = 0; i < dt.DefaultView.Count; i++)
15
{
16
ddlMenu.Items.Add("*" + dt.DefaultView[i]["menu_name"].ToString());
17
GetChildNode(dt, dt.DefaultView[i]["menu_id"].ToString());
18
}
19
20
21
}
22
23
24
private string GetChildNode(DataTable dt, string _parentNodeId)
25
{
26
string name = string.Empty;
27
dt.DefaultView.RowFilter = "menu_pid=" + _parentNodeId;
28
29
if (dt.DefaultView.Count > 0)
30
{
31
for (int i = 0; i < dt.DefaultView.Count; i++)
32
{
33
name = dt.DefaultView[i]["menu_name"].ToString();
34
switch (Convert.ToInt32(dt.DefaultView[i]["menu_level"].ToString()))
35
{
36
case 1:
37
ddlMenu.Items.Add(" * " + name);
38
break;
39
case 2:
40
ddlMenu.Items.Add(" * * " + name);
41
break;
42
case 3:
43
ddlMenu.Items.Add(" * * * " + name);
44
break;
45
case 4:
46
ddlMenu.Items.Add(" * * * * " + name);
47
break;
48
case 5:
49
ddlMenu.Items.Add(" * * * * * " + name);
50
break;
51
}
52
GetChildNode(dt, dt.DefaultView[i]["menu_id"].ToString());
53
dt.DefaultView.RowFilter = "menu_pid=" + _parentNodeId;
54
}
55
return "";
56
}
57
else
58
{
59
return "";
60
}
61
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。