前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用RadControls的RadMenu控件开发系统菜单

使用RadControls的RadMenu控件开发系统菜单

作者头像
全栈程序员站长
发布2022-09-15 17:12:59
发布2022-09-15 17:12:59
6960
举报

大家好,又见面了,我是你们的朋友全栈君。

关于菜单这个话题我想应该是不讲则懂,所以本文不会多讲这些概念,则重关注RadControls控件中的RadMenu控件的使用,结合数据库来开发一个系统菜单。

一、数据库设计

这里我就使用Access作为示例数据库,详细见下图:

表字段依次为:自动编号、菜单编码、菜单名称、请求地址、菜单上显示的图片地址、快捷键(RadMenu控件支持)、菜单顺序、菜单级限、是否为末级和父菜单编码。 整个设计中主要以菜单编码作为关联依据。

二、注册控件及使用控件皮肤

我们可以将控件添加到工具箱直接拖拽到aspx页面上就OK,随后可以在html视图下看到如下注册命令:

<!–<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />–> 1 <% @RegisterAssembly = “ RadMenu.Net2 “ Namespace = “ Telerik.WebControls “ TagPrefix = “ rad “ %>

要使用RadControls提供的皮肤功能很方便,从安装目录下将皮肤文件复制到项目中,然后在控件上直接选择所需要的皮肤就OK。下图为RadMenu选择皮肤截图:

三、编码实现读取数据

示例使用Access数据库,简单配置了几条数据,通过ADO.NET读出来这个很简单,这里就不多说。菜单下的子菜单,以及下一级子菜单,凡是菜单都有可能会有这种情况,这里递归生成就OK。相关代码如下:

<!–<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />–> 1 namespace MenuDome 2 { 3 public class Menu 4 { 5 private static string connectionString = “ Provider=Microsoft.jet.OLEDB.4.0;dataSource= “ 6 + HttpContext.Current.Server.MapPath( @” App_Data/MenuDB.mdb “ ); 7 8 private DataTableExecuteQuery( string cmdText) 9 { 10 using (OleDbConnectionconn = new OleDbConnection(connectionString)) 11 { 12 using (OleDbDataAdapteroda = new OleDbDataAdapter(cmdText,conn)) 13 { 14 DataSetds = new DataSet(); 15 oda.Fill(ds); 16 return ds.Tables[ 0 ]; 17 } 18 } 19 } 20 21 public DataTableGetMenu() 22 { 23 string sql = “ select*frommenuwheregrade=0 “ ; 24 return ExecuteQuery(sql); 25 } 26 27 public DataTableGetMenuBySupCode( string supMenuCode) 28 { 29 string sql = “ select*frommenuwheresupmenucode=’ “ + supMenuCode + “ ‘ “ ; 30 return ExecuteQuery(sql); 31 } 32 } 33 }

四、生成菜单项的准备

菜单一般都是公用的(不考虑用户权限相关的控制),我们可以把它开发成为一个公共的部分。本示例使用母版页来做菜单,新建母版页:

在此母版页里加入RadMenu控件,并设置相应的皮肤就OK。如下代码块:

<!–<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />–> 1 < body > 2 < form id =”form1″ runat =”server” > 3 4 <% — 菜单开始 — %> 5 < rad:RadMenu ID =”SystemMenu” runat =”server” Skin =”Web20″ > 6 </ rad:RadMenu > 7 <% — 菜单结束 — %> 8 9 <% — 内容开始 — %> 10 < asp:ContentPlaceHolder ID =”CPH” runat =”server” > 11 12 </ asp:ContentPlaceHolder > 13 <% — 内容结束 — %> 14 15 </ form > 16 </ body >

五、根据数据库数据生成菜单项

现在就差最后一步了,根据数据库里读取的数据生成菜单项。由于菜单下会有子菜单情况,示例中将菜单项生成分两步来处理,详细见如下代码:

<!–<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />–> 1

private void InitMenu() 2

{ 3

//查询出菜单配置信息 4

DataTabledtMenu=menu.GetMenu(); 5

6

for(inti=0;i<dtMenu.Rows.Count;i++) 7

{ 8

//Rad菜单项 9

RadMenuItemitem=newRadMenuItem(); 10

11

item.ID=dtMenu.Rows[i][“Code“].ToString(); 12

item.Text=dtMenu.Rows[i][“Name“].ToString(); 13

item.Value=dtMenu.Rows[i][“Url“].ToString(); 14

item.AccessKey=dtMenu.Rows[i][“ShortCut“].ToString(); 15

16

this.SystemMenu.Items.Add(item); 17

18

//菜建子菜单 19

InitSubMenu(item,dtMenu.Rows[i][“Code“].ToString()); 20

} 21

}

除了上面的方法,还有一个构建子菜单的方法InitSubMenu(),如下代码块:

<!–<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />–> 1 private void InitSubMenu(RadMenuItemitem, string supMenuCode) 2 { 3 DataTabledtMenu = menu.GetMenuBySupCode(supMenuCode); 4 5 if (dtMenu != null ) 6 { 7 foreach (DataRowdataRow in dtMenu.Rows) 8 { 9 RadMenuItemsubItem = new RadMenuItem(); 10 11 subItem.ID = dataRow[ “ ID “ ].ToString(); 12 subItem.Text = dataRow[ “ Name “ ].ToString(); 13 subItem.Value = dataRow[ “ Url “ ].ToString(); 14 subItem.AccessKey = dataRow[ “ ShortCut “ ].ToString(); 15 16 item.Items.Add(subItem); 17 18 if (Convert.ToInt32(dataRow[ “ EndGrade “ ]) != 1 ) 19 { 20 InitSubMenu(subItem,Convert.ToString(dataRow[ “ Code “ ])); 21 } 22 } 23 } 24 }

六、展现RadMenu风采

通过上面一步步的开发,现在终于可以一览RadMenu的风采了。通过上面建立的母版页建立一内容页,直接运行内容页就可以看到效果了。示例中我使用了三种皮肤:Web2.0,WebBlue和Vista,下面是此三种皮肤的运行截图:

七、其他

出了皮肤是一大特色外,RadMenu还提供了很多客户端事件,我们利用这些API可以很方便在在客户端通过JavaScript动态的来创建、添加、删除菜单项,如下属性截图:

尤其是在AJAX普遍使用的今天,无刷新的应用开发越来越普遍,RadMenu为我们提供了比较完美的菜单解决方案。

本文就简单介绍于此,更多示例可以访问RadControls官方提供的在线Demo,希望本文对大家在菜单开发上可以起到一定的帮助。官方示例地址:http://demos.telerik.com/aspnet/Menu/Examples/Overview/DefaultCS.aspx

本文示例下载

注:原创文章欢迎转载,转载请注明出处。 出处:http://beniao.cnblogs.com/http://www.cnblogs.com/

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161981.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档