当前位置:  编程技术>.net/c#/asp.net

asp.net(C#)生成无限级别菜单的代码

    来源: 互联网  发布时间:2014-08-30

    本文导语:  asp.net写的无限级别菜单,开发环境为VS2008+SQL 2000。有需要的朋友可以参考下。 首先,创建数据库表。   代码如下: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[work_sysmenu]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [d...

asp.net写的无限级别菜单,开发环境为VS2008+SQL 2000。有需要的朋友可以参考下。
首先,创建数据库表。
 

代码如下:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[work_sysmenu]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[work_sysmenu]
GO
CREATE TABLE [dbo].[work_sysmenu] (
[flowid] [int] IDENTITY (1, 1) NOT NULL ,
[menu_title] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[menu_value] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[menu_url] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
[menu_parent] [int] NULL ,
[menu_role] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[menu_meno] [text] COLLATE Chinese_PRC_CI_AS NULL ,
[isvalid] [int] NULL ,
[menu_order] [int] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

其中,menu_parent为菜单的级别代码,最顶级为0,其他级别代码为上级菜单的flowid。
ASP.NET中使用导航中的Menu控件作为菜单。
首先需要将级别为0的顶级菜单添加到Menu中:
 

代码如下:
///
/// 根据用户权限获取系统菜单
///
private void GetSysMenu()
{
string str = "select * from work_sysmenu where dbo.GetCharCount(menu_role,'" + this.roleid +"')=1 and isvalid=1 order by menu_order";
DataSet ds= sysSqlRunner.getDataset(str);
DataRow[] drRoot = ds.Tables[0].Select("menu_parent=0");
//循环生成父菜单
foreach (DataRow dr in drRoot)
{
MenuItem mi = new MenuItem();
mi.Text = dr["menu_title"].ToString();
mi.Value = dr["menu_value"].ToString();
//mi.NavigateUrl = dr["menu_url"].ToString();
mi.Selectable = false;
mainMenu.Items.Add(mi);
//递归算法生成所有级别的下级子菜单
CreateMenu(ds.Tables[0], dr["flowid"].ToString(), mi);
}
}
 

以上代码中的sysSqlRunner.getDataset是我自用的一个数据持久层框架内的方法,用来执行一段SQL并返回Dataset,这个可以根据自己的需要来使用不同的方法。另外有一条SQL语句中包含一个我自己写的自定义函数dbo.GetCharCount,作用是获取一个字符串中,某个字符存在的个数。
 

代码如下:
Create function GetCharCount(@target varchar(100),@sear varchar(1))
returns int
as
begin
declare @charcount int
select @charcount=(len(@target)-len(replace(@target,@sear,'')))
return @charcount
end

生成下级无级树的方法代码:
 

代码如下:
///
/// 创建无级树菜单
///
/// 获取菜单的数据源
/// 菜单的父ID
/// 创建菜单的Item
private void CreateMenu(DataTable dt,string parentID,MenuItem parItem)
{
DataRow[] drs= dt.Select("menu_parent=" + parentID);
if (drs.Length > 0)
{
foreach (DataRow dr in drs)
{
MenuItem mi = new MenuItem();
mi.Text = dr["menu_title"].ToString();
mi.Value = dr["menu_value"].ToString();
mi.NavigateUrl = dr["menu_url"].ToString();
parItem.ChildItems.Add(mi);
CreateMenu(dt, dr["flowid"].ToString(), mi);
}
}
else
{
return ;
}
}
 

现在只需要在数据表中添加菜单记录,即可生成所需级别的菜单。
注意:顶级菜单的menu_parent值必须为0。当然也可以在此基础上根据需要做修改。


    
 
 

您可能感兴趣的文章:

  • 用C#,asp.net 做的网站,能用Linux做服务器吗?
  • c#(asp.net)接收存储过程返回值的方法
  • c#正则过滤图片标签 asp.net正则过滤的例子
  • c#(asp.net)实现的文件下载函数
  • asp.net(c#版)添加DataRow数据列到DataTable控件
  • c#(asp.net)连接excel的实例代码
  • c#(asp.net) new与override的区别
  • asp.net(c#) 使用Rex正则来生成字符串数组的代码
  • asp.ent 图片上传数据库的代码(c#)
  • c# asp .net 动态创建sql数据库表的方法
  • c#(asp.net)生成随机数(不重复)的例子
  • c#(asp.net)访问母版页的控件、属性、方法介绍
  • c#(asp.net) 时间操作基类(支持长短日期与时间差)
  • asp.net C#检查URL是否有效的方法
  • c# UpdatePanel无刷新上传图片 asp.net无刷新上传
  • c#(asp.net)线程配置总结
  • c# asp.net 多线程实例(经典)
  • asp.net验证码代码(C#)
  • asp.net中C#获取字符串中汉字的个数的具体实现方法
  • c#(asp.net)防止刷新重复提交数据的解决方法
  • asp.net 生成无重复随机数的代码
  • asp.net 生成静态页时如何过滤掉viewstate
  • asp.net生成与解析二维码的例子
  • asp.net生成图片验证码的例子
  • asp.net创建位图生成验证图片类(验证码类)
  • ASP和PHP实现生成网站快捷方式并下载到桌面的方法
  • asp.net生成二维表格的实例代码
  • Asp.net动态生成html页面的实例详解
  • asp.net随机验证码生成示例
  • asp.net验证码图片生成示例
  • asp.net 简单生成缩略图的代码详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在jsp 中如何实现像asp 中的页面弹出式的菜单
  • ASP.NET之 Ajax相关知识介绍及组件图
  • 我想了解一些关于Java怎样与Asp或Asp.net结合方面在未来发展方向的问题?
  • c#/ASP.NET操作cookie(读写)代码示例
  • asp.net UrlEncode对应asp urlencode的处理方法
  • asp.net实例 定义和使用asp:AccessDataSource
  • win2008 r2 服务器环境配置(FTP/ASP/ASP.Net/PHP)
  • asp与asp.net的session共享
  • 如何在unix下发布asp?
  • 怎么让Apache支持Asp?
  • ??谁能把ASP代码改为JSP的
  • Linux平台下哪种方法实现ASP好?
  • ASP和ASP.Net共享Session解决办法
  • 通过socket和asp打交道
  • 犹豫中……,到底是选择ASP,还是JSP?
  • asp 是否 可用applet标签?帮忙!!
  • asp.net判断数据库表是否存在 asp.net修改表名的方法
  • 新人提问:asp+access的程序在linux下怎么改?
  • 用JAVA APPLET做的交互式网页和ASP、PHP做的相比有什么优势呢?
  • asp.net文字水印功能简单代码
  • asp里面可否使用java写的邮件,给30分.
  • asp与Jsp可否在iis中共存的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3