常用方法-MIS系统常用的树菜单
今天公司没什么事做,就写了个树菜单的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]
程序代码:
下以是据体的操作步骤:
数据库设计:
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]
程序代码:
1protected 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 }
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 }
专注于