首先这里下载免费的 控件 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控件使用的问题

20
控件 ]

     下面代码为初始化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" >                                    </dxnb:ASPxNavBar>

根据权限动态加载数据库菜单的DevExpressNavBar导航栏的实现


 

 

ASPxNavBar 代码绑定数据的方法

分类: 专业相关 477人阅读 评论(0) 收藏 举报

方法一:

 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);
            }
        }

相关文章: