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

使用RadControls的RadMenu控件开发系统菜单关于菜单这个话题我想应该是不讲则懂,所以本文不会多讲这些概念,则重关注RadControls控件中的RadMenu控件的使用,结合数据库来开发一个系统菜单。一、数据库设计这里我就使用Access作为示例数据库,详细见下图:表字段依次为:自动编号、菜单编码、菜单名称、请求地址、菜单上显示的图片地址、快捷键(RadMenu控件支持)、菜单顺序、菜单级限、是否为末级和父菜单编码。整个设计中…

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

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

一、数据库设计

这里我就使用Access作为示例数据库,详细见下图:
使用RadControls的RadMenu控件开发系统菜单

表字段依次为:自动编号、菜单编码、菜单名称、请求地址、菜单上显示的图片地址、快捷键(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选择皮肤截图:
使用RadControls的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
}

四、生成菜单项的准备

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

在此母版页里加入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
使用RadControls的RadMenu控件开发系统菜单
private

void
InitMenu()

2
ExpandedBlockStart.gifContractedBlock.gif
使用RadControls的RadMenu控件开发系统菜单
{

3使用RadControls的RadMenu控件开发系统菜单//查询出菜单配置信息
4使用RadControls的RadMenu控件开发系统菜单DataTabledtMenu=menu.GetMenu();
5使用RadControls的RadMenu控件开发系统菜单
6使用RadControls的RadMenu控件开发系统菜单for(inti=0;i<dtMenu.Rows.Count;i++)
7ExpandedSubBlockStart.gifContractedSubBlock.gif使用RadControls的RadMenu控件开发系统菜单{

8使用RadControls的RadMenu控件开发系统菜单//Rad菜单项
9使用RadControls的RadMenu控件开发系统菜单RadMenuItemitem=newRadMenuItem();
10使用RadControls的RadMenu控件开发系统菜单
11使用RadControls的RadMenu控件开发系统菜单item.ID=dtMenu.Rows[i][Code].ToString();
12使用RadControls的RadMenu控件开发系统菜单item.Text=dtMenu.Rows[i][Name].ToString();
13使用RadControls的RadMenu控件开发系统菜单item.Value=dtMenu.Rows[i][Url].ToString();
14使用RadControls的RadMenu控件开发系统菜单item.AccessKey=dtMenu.Rows[i][ShortCut].ToString();
15使用RadControls的RadMenu控件开发系统菜单
16使用RadControls的RadMenu控件开发系统菜单this.SystemMenu.Items.Add(item);
17使用RadControls的RadMenu控件开发系统菜单
18使用RadControls的RadMenu控件开发系统菜单//菜建子菜单
19使用RadControls的RadMenu控件开发系统菜单InitSubMenu(item,dtMenu.Rows[i][Code].ToString());
20使用RadControls的RadMenu控件开发系统菜单}

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

除了上面的方法,还有一个构建子菜单的方法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,下面是此三种皮肤的运行截图:

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

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

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

七、其他

出了皮肤是一大特色外,RadMenu还提供了很多客户端事件,我们利用这些API可以很方便在在客户端通过JavaScript动态的来创建、添加、删除菜单项,如下属性截图:
使用RadControls的RadMenu控件开发系统菜单
尤其是在AJAX普遍使用的今天,无刷新的应用开发越来越普遍,RadMenu为我们提供了比较完美的菜单解决方案。

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

本文示例下载

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年7月24日 下午6:36
下一篇 2022年7月24日 下午6:36


相关推荐

  • 各位学弟学妹,别再看教材了,时间复杂度看这篇就好了[通俗易懂]

    各位学弟学妹,别再看教材了,时间复杂度看这篇就好了[通俗易懂]时间复杂度是学习算法的基石,今天我们来聊聊为什么要引入时间复杂度,什么是时间复杂度以及如何去算一个算法的时间复杂度一、刻画算法的运行时间某日,慧能叫来了一尘打算给他补习补习一下基础知识,只见克写了一段非常简单的代码一尘看老师有点生气,开始虚心请教了为了方便讨论,这里我们把每一条语句的执行时间都看做是一样的,记为一个时间单元①蓝色框的两条语句,花费两个时间单元②黑色框的一条语句,花费n+1个时间单元③红色框的两条语句,花费2*n个时间单元这不是.

    2022年5月15日
    35
  • 向域中批量创建用户

    向域中批量创建用户

    2021年5月27日
    114
  • 什么是索引?Mysql目前主要的几种索引类型「建议收藏」

    什么是索引?Mysql目前主要的几种索引类型「建议收藏」一、索引MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。创建索引时,你需要确保该索引是应用在SQ…

    2022年4月30日
    114
  • MySQL if语句的三种用法

    MySQL if语句的三种用法1 IF 表达式 IF expr1 expr2 expr3 如果 expr1 为 TRUE 则 IF 返回值为 expr2 否则返回值为 expr3updates if sex 男 女 男 这是 leetcode 上的一道题 将 salary 表中的性别进行转换 男变女 女变男性别变更 2 IFNULL 语句 IFNULL expr1 expr2 假如 expr1 不为 null 则返回 expr1 否则返回 expr23 IF ELSE 语句 IFsearch con

    2026年3月18日
    3
  • Object数组转String数组

    Object数组转String数组1、System.arraycopy把一个数组中某一段字节数据放到另一个数组中//src:源数组;srcPos:源数组要复制的起始位置;dest:目的数组;destPos:目的数组放置的起始位置;length:复制的长度.publicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)Object[]src={“A”,”B”,”C”};String[]dest=

    2022年5月4日
    46
  • Cursor Rules使用全攻略:让项目代码更智能、更高效

    Cursor Rules使用全攻略:让项目代码更智能、更高效

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号