Asp.Net怎样让菜单绑定数据库

作者:waki.hunt

email:waki@163.net

 
   VS2005提供了菜单控件,但不支持与数据库进行直接绑定,要根据权限等生成动态菜单不方便。我新做了个
菜单控件WakiCoolBar for Asp.Net 2.0。新增的特性有:
1.新增设置控件背景图片属性(BackGround),并可设置背景图片的显示位置及重复模式。
2.新增四种皮肤效果作为设置参考,可完全自行修改而做出新的皮肤效果来。
3.新增Panels属性,可以方便地在IDE环境中进行可视化地添加菜单项,简单快捷,比设置XML文档更方便。同时
为兼容1.0版,保留了设置XML的方式,可设置属性PanelSrc。
4.为动态控制菜单的显示项,如不同权限显示不同的菜单,特新增了数据库绑定功能,只要将数据表按特定的方
式进行整理,就可以进行自动绑定选择出的DataSet。

控件效果地址:http://www.aspxcontrol.com/wakicoolbar/cn/DataBind.aspx
下载地址:http://www.aspxcontrol.com/download/wakicoolbar.rar
本文主要介绍怎样使用WakiCoolBar控件生成动态菜单。首先创建Access示例数据库,新建表items,结构
为:id,title,url,bigimage,smallimage,imagestyle,target,parentid
其中id为自动编号字段,parentid为数字字段,其它均为文本字段。这里使用parentid进行自关联,使用权得
在一个表中可以同时容纳菜单栏(Panel)和菜单项(Item)。
新建权限表permit,结构为:id userid itemid。id为自动编号字段,userid记录用户ID,这里为了简
便,不再新建用户表,直接使用其ID,假设已有三个用户:User1,id=1;User2,id=2;User3,id=3。itemid与菜
单项id字段关联,如果某位用户有多项权限,则每项权限应为一条记录。菜单栏也应有关联,否则菜单栏下的所
有二级菜单都不可见。
首先定义protected System.Data.DataSet dataSet11。再设置控件的各项属性:
Wakicoolbar1.DataSource=dataSet11;
Wakicoolbar1.DataKeyField="id";
Wakicoolbar1.DataBigImageField="bigimage";
Wakicoolbar1.DataImageStyleField="imagestyle";
Wakicoolbar1.DataMember="items";
Wakicoolbar1.DataParentKeyField="parentid";
Wakicoolbar1.DataSmallImageField="smallimage";
Wakicoolbar1.DataTargetField="target";
Wakicoolbar1.DataTitleField="title";
Wakicoolbar1.DataUrlField="url";
先过滤出选择的用户所具有的菜单项:
String selectStr = "select itemid from permit where userid=" +
this.DropDownList1.SelectedValue;
this.oleDbDataAdapter1 = new System.Data.OleDb.OleDbDataAdapter();
this.oleDbSelectCommand1 = new System.Data.OleDb.OleDbCommand();
this.oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
this.dataSet11 = new DataSet();
this.oleDbDataAdapter1.SelectCommand = this.oleDbSelectCommand1;

this.oleDbSelectCommand1.CommandText = selectStr;
this.oleDbSelectCommand1.Connection = this.oleDbConnection1;
String connStr = Server.MapPath("itemData.mdb");
this.oleDbConnection1.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" +
connStr;
this.oleDbConnection1.Open();
this.oleDbDataReader1 = this.oleDbSelectCommand1.ExecuteReader();
while(this.oleDbDataReader1.Read())
{
idStr += this.oleDbDataReader1["itemid"].ToString() + ",";
}
this.oleDbDataReader1.Close();
if(idStr.Substring(idStr.Length - 1,1) == ",")
{
idStr = idStr.Substring(0,idStr.Length - 1);
}
得到的idStr即为选择的用户所具有权限的菜单项集合。
this.oleDbConnection1.Close();
selectStr = "SELECT bigimage,id,imagestyle,parentid,smallimage,target,title,url FROM items
where id in(" + idStr + ")";

this.oleDbSelectCommand1.CommandText = selectStr;
this.oleDbConnection1.Open();
oleDbDataAdapter1.Fill(dataSet11,"items");
this.WakiCoolBar1.DataBind();

this.oleDbConnection1.Close();
最终填充的dataSet就会根据permit表中定义的权限进行菜单过滤,从而实现不同权限的人看到不同的菜单的目
的。只要将适合规范的dataSet设置给WakiCoolBar控件,在控件内容可自动处理菜单栏与菜单项的关系,并自
动进行绑定。
    本示例工程下载
 

« 关闭窗口 »