首先这里下载免费的 控件 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); //在每个组里添加子菜单
}
}
ASPxNavBar控件使用的问题
下面代码为初始化ASPxNavBar控件(版本为:DevExpress.Web.v9.1)
实现功能为:点击左边菜单,在右边的IFRAME加载对应的页面。
在点击左边菜单项的时候,用JavaScript获取此控件的Name或者Target 属性,因为把要加载对应的页面赋值给了name和target。用了event.srcElement等等获取的代码都获取不到。
navbarGroup = new NavBarGroup();
navbarGroup.Text = menuName;
DataRow[] rows = ds.Tables[0].Select("C_W_C_WEB_SYSMENU_ID = " + menuId + "");
if (rows.Length >0)
{
foreach (DataRow row in rows)
{
string sonmenuName = row["MENUNAME"].ToString();
string src = "test.aspx";
navbarItem = new NavBarItem();
navbarItem.Text = sonmenuName;
navbarItem.Name = src;
navbarItem.Target = src;
navbarGroup.Items.Add(navbarItem);
}
}
=========JavaScript代码==========================
<dxnb:ASPxNavBar ID="MenuBar" runat="server" EncodeHtml="true" Width="150px" Height="100%" AutoCollapse="True" CssFilePath="~/App_Themes/Blue/{0}/styles.css" CssPostfix="Blue" ImageFolder="~/App_Themes/Blue/{0}/">
<ItemTextTemplate>
<dxhl:ASPxHeadline CssClass="PageStatus" id="hlItem" runat="server" ShowContentAsLink='<%# !Container.Item.Selected %>' NavigateUrl='<%# Eval("NavigateUrl") %>' EnableViewState="False" EnableDefaultAppearance="False" ContentText='<%# Eval("Text") %>' TailPosition="KeepWithLastWord" EnableTheming="False">
<ContentStyle LineHeight="118%" />
</dxhl:ASPxHeadline>
</ItemTextTemplate>
<CollapseImage Url="~/App_Themes/Blue/Web/nbCollapse.gif" />
<ExpandImage Url="~/App_Themes/Blue/Web/nbExpand.gif" />
<ClientSideEvents ItemClick="function()
{
var src = event.srcElement.name;
window.frames['middleContent'].location.replace(src);
}" />
</dxnb:ASPxNavBar>
方法一:
public void MyGetDate()
{
string sSql = @"select * from sModule where ParentIndex='0' and SystemId='1000'";
DataTable table = CommClass.GetDataTable(sSql);
ASPxNavBar1.Groups.Clear();
int i = 0;
foreach (DataRow dr in table.Rows)
{
ASPxNavBar1.Groups.Add(dr["ModuleName"].ToString());
this.MyGetSecond(dr["ModuleId"].ToString(),i++);
}
}
public void MyGetSecond(string sParent,int i)//加子集
{
DevExpress.Web.ASPxNavBar.NavBarItem item = null;
string sSql = String.Format(@"select * from sModule where ParentIndex='{0}' and SystemId='1000'",sParent);// ParentIndex='0' and
//string sSql = "select Did, MenuName from WebMenu where MenuKind=1 order by SeqIndex";
DataTable table = CommClass.GetDataTable(sSql);
if (table.Rows.Count > 0)
{
foreach (DataRow row in table.Rows)
{
string sDid = row["Did"].ToString();
string sName = row["ModuleName"].ToString();
string sUrl = string.Format("webArticle.aspx?menudid={0}", sDid);
item = new DevExpress.Web.ASPxNavBar.NavBarItem(sName, sName, "", sUrl);
ASPxNavBar1.Groups[i].Items.Add(item);
}
}
}
方法二:
string strSql = @"select * from sModule where SystemId='1000' and ParentIndex=0";
DataTable table = CommClass.GetDataTable(strSql);
foreach (DataRow dr in table.Rows)
{
DevExpress.Web.ASPxNavBar.NavBarGroup NavBarGroup1=new DevExpress.Web.ASPxNavBar.NavBarGroup(dr["ModuleName"].ToString());
this.ASPxNavBarsModule.Groups.Add(NavBarGroup1);
strSql = @"select * from sModule where ParentIndex=" + dr["ModuleId"].ToString() + " order by ModuleIndex desc";
DataTable dt = CommClass.GetDataTable(strSql);
foreach (DataRow dr1 in dt.Rows)
{
DevExpress.Web.ASPxNavBar.NavBarItem NavBarItem1=new DevExpress.Web.ASPxNavBar.NavBarItem(dr1["ModuleName"].ToString());
NavBarGroup1.Items.Add(NavBarItem1);
}
}