惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
罗磊的独立博客
SecWiki News
SecWiki News
The Register - Security
The Register - Security
The GitHub Blog
The GitHub Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Schneier on Security
IT之家
IT之家
博客园 - 聂微东
T
The Exploit Database - CXSecurity.com
Recorded Future
Recorded Future
大猫的无限游戏
大猫的无限游戏
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Vercel News
Vercel News
G
GRAHAM CLULEY
D
DataBreaches.Net
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
SegmentFault 最新的问题
博客园_首页
雷峰网
雷峰网
T
Tenable Blog
Spread Privacy
Spread Privacy
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
Cisco Talos Blog
Cisco Talos Blog
V
Visual Studio Blog
J
Java Code Geeks
博客园 - Franky
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
C
CERT Recently Published Vulnerability Notes
T
Threatpost
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
P
Privacy International News Feed
T
Threat Research - Cisco Blogs
T
The Blog of Author Tim Ferriss
V
Vulnerabilities – Threatpost
Recent Announcements
Recent Announcements
Blog — PlanetScale
Blog — PlanetScale
Security Latest
Security Latest
U
Unit 42
M
MIT News - Artificial intelligence
Y
Y Combinator Blog
K
Kaspersky official blog
有赞技术团队
有赞技术团队
B
Blog
腾讯CDC

博客园 - jerry zheng

九个使用F#的理由 修改SharePoint网站最大上载大小时有时需要关注的事项 给网站加上 开心网 转帖功能 接着加班 。 关于ASP.NET中用GB2312编码后Request的乱码问题 一年过去了 我每天问自己以下几个问题: 7月份项目开发心得 7月份的第一个星期五。 在repeater,gridview,datalist (数据源)中使用“用户自定义控件”时应该注意 基于ASP.NET AJAX 实现 client js call back web services ,return dataset or datatable... javascript常用函数集 加班通宵的日子 程序员的人生 该将如何规划?(转) 浅谈数据库设计技巧(上)、(下) 写给WEB2.0的站长 让silverlight支持输入文本框 start learning silverlight 今天正式注册个人博客
常用方法-MIS系统常用的树菜单
jerry zheng · 2008-07-10 · via 博客园 - jerry zheng

今天公司没什么事做,就写了个树菜单的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    }