常用方法-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]

程序代码:
 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    }




posted @ 2008-07-10 16:00  jerry zheng  阅读(325)  评论(0编辑  收藏  举报