根据权限动态加载数据库菜单的DevExpressNavBar导航栏的实现(高手勿进)
首先这里下载免费的 控件 ASP.NET Controls (the ASPxperience Suite)
http://www.devexpress.com/Products/Free/WebRegistration60/
注册激活,然后下载安装,不多说了。
今天先抛开权限,说下如何吧数据库菜单加载到DevExpress ASPxNavBar控件上。
数据库结构见图1. Menu为主菜单,SubMenu为子菜单,MenuID外键
在你的页面上打开工具栏,放上名为: ASPxNavBar 的控件, 这款导航栏控件的组(group)集合(group collections)用来绑定我们主菜单的值,每个group内含有Items用来绑定我们的子菜单值。具体代码见下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AddMenu(); //页面加载
}
}
//加载菜单的方法
private void AddMenu()
{
navPublic.Groups.Clear();//清空控件的值
DataView dvRoot = 从你的数据层或者逻辑层取出你的主菜单列表
DataView dvChild = 从你的数据层或者逻辑层取出你的子菜单列表
FillMenuRoot(dvRoot); //调用下面的方法绑定主菜单到控件的组集合(group collections)
for (int i = 0; i < navPublic.Groups.Count; i++) //读出共有多少主菜单作为组,来做循环
{
FillMenuChild(dvChild, navPublic.Groups[i]); //依次为每个组添加子菜单
}
}
private void FillMenuRoot(DataView dvRoot) //传递主菜单的数据表
{
foreach (DataRowView drv in dvRoot) //在主菜单表里以每一行做循环操作
{
NavBarGroup group = new NavBarGroup(drv.Row["MenuName"].ToString(), drv.Row["MenuID"].ToString(), null, drv.Row["MenuUrl"].ToString()); // 为每个主菜单创建个新分组,构造体中传递菜单名,ID,有自定义图片的绑没图片的NULL,菜单的链接
navPublic.Groups.Add(group); //navPublic是导航栏菜单实例,往组集合里添加每个组
}
}
private void FillMenuChild(DataView dvChild, NavBarGroup group) //子菜单表,分组 作为参数传递
{
dvChild.RowFilter = "MenuID=" + group.Name.Trim(); //更具group里的name(主菜单ID)过滤出相关联的子菜单
foreach (DataRowView drv in dvChild) //以每个子菜单做循环
{
NavBarItem groupItem = new NavBarItem(drv.Row["SubMenuName"].ToString(), drv.Row["SubMenuID"].ToString()); //为每个子菜单创建新item,构造体中传递子菜单名,和子菜单ID
if (drv.Row["SubMenuUrl"] != null) //如果子菜单的链接不为空
{
groupItem.NavigateUrl = drv.Row["SubMenuUrl"].ToString(); //往item里附加页面链接
}
group.Items.Add(groupItem); //在每个组里添加子菜单
}
}