DevExpress 中根据数据库字典动态生成卡式菜单 z
第三方的Devexpress套件因为要使用权限机制控制不同用户进入系统显示菜单所以要配合字典数据动态生成。在WEB中这种问题灰常的轻松在winform里就稍微有点不同为了用DEV实现卡式菜单有组的概念具体如图红色部分

提示:这里用了菜单头、菜单组、菜单项来逐级生成 ,首先是菜单头便利创建然后判断是否有菜单组如果有菜单组就先生成菜单组然后把菜单项加入菜单组最后为按钮注册事件,这里的事情用一个公用方法搞定即可
/// <summary>
/// 动态加载菜单
/// </summary>
private void GetMenuBind()
{
//根据登录用户角色菜单动态创建
//循环创建卡菜单
DataTable baseModuleDT = BLL.BaseModule.GetDataTable("LevelNo=1", "");
for (int i = ; i < baseModuleDT.Rows.Count; i++)
{
//创建卡
RibbonPage ribbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage();//菜单卡对象定义
ribbonPage.Text = baseModuleDT.Rows[i]["FullName"].ToString();
this.ribbon.Pages.Add(ribbonPage); //获取组菜单
DataTable baseModuleDTG = BLL.BaseModule.GetDataTable("ParentId=" + baseModuleDT.Rows[i]["Id"].ToString() + " and LevelNo=2", "");
if (baseModuleDTG.Rows.Count <= )
{
//没有组
RibbonPageGroup ribbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();//菜单卡分组定义
ribbonPageGroup.Text = baseModuleDT.Rows[i]["FullName"].ToString();//卡片组名
ribbonPage.Groups.Add(ribbonPageGroup); DataTable baseModuleDTB = BLL.BaseModule.GetDataTable("ParentId=" + baseModuleDT.Rows[i]["Id"].ToString() + " and LevelNo=3", "");
for (int b = ; b < baseModuleDTB.Rows.Count; b++)
{ Image image = Image.FromFile(filePath + baseModuleDTB.Rows[b]["MenuIco"].ToString());//获取文件
//功能按钮
BarButtonItem barButtonItem = new DevExpress.XtraBars.BarButtonItem();
barButtonItem.Caption = baseModuleDTB.Rows[b]["FullName"].ToString();
barButtonItem.LargeGlyph = image;// global::MemberManager.Properties.Resources.group_key;
barButtonItem.Name = baseModuleDTB.Rows[b]["WinFrom"].ToString();
barButtonItem.Tag = baseModuleDTB.Rows[b]["WinFrom"].ToString().Substring(, baseModuleDTB.Rows[b]["WinFrom"].ToString().IndexOf('.'));//截取文件名点以前的
ribbonPageGroup.ItemLinks.Add(barButtonItem);
barButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem_ItemClick);//注册事件
} }
else
{
for (int g = ; g < baseModuleDTG.Rows.Count; g++)
{
//创建组
RibbonPageGroup ribbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();//菜单卡分组定义
ribbonPageGroup.Text = baseModuleDTG.Rows[g]["FullName"].ToString();//卡片组名
ribbonPage.Groups.Add(ribbonPageGroup); DataTable baseModuleDTB = BLL.BaseModule.GetDataTable("ParentId=" + baseModuleDTG.Rows[g]["Id"].ToString() + " and LevelNo=3", "");
for (int b = ; b < baseModuleDTB.Rows.Count; b++)
{
Image image = Image.FromFile(filePath + baseModuleDTB.Rows[b]["MenuIco"].ToString());//获取文件
//功能按钮
BarButtonItem barButtonItem = new DevExpress.XtraBars.BarButtonItem();
barButtonItem.Caption = baseModuleDTB.Rows[b]["FullName"].ToString();
barButtonItem.LargeGlyph = image;// global::MemberManager.Properties.Resources.group_key;
barButtonItem.Name = baseModuleDTB.Rows[b]["WinFrom"].ToString();
//barButtonItem.Tag = baseModuleDTB.Rows[b]["WinFrom"].ToString().Substring(0, baseModuleDTB.Rows[b]["WinFrom"].ToString().IndexOf('.'));//截取文件名点以前的
ribbonPageGroup.ItemLinks.Add(barButtonItem);
barButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem_ItemClick);//注册事件
} }
} }
}
动态调用事件如下:
/// <summary>
/// 动态调出窗体事件 注:动态调用窗体名需和数据库中名称完全一致
/// </summary>
private void barButtonItem_ItemClick(object sender, ItemClickEventArgs e)
{ if (!ShowChildrenForm(e.Item.Tag.ToString()))
{
if (this.MdiChildren.Length < childFormMaxNumber)
{
DictItemUtil.AddLog("成功打开" + e.Item.Caption.ToString());
Assembly asm = Assembly.Load("MemberManager");//程序集名
object frmObj = asm.CreateInstance("MemberManager." + e.Item.Tag.ToString());//程序集+form的类名。
Form childForm = (Form)frmObj;
childForm.Tag = e.Item.Tag.ToString(); //tag属性要重新写一次,否则在第二次的时候取不到。原因还不清楚。有知道的望告知。
childForm.MdiParent = this;
childForm.Show();
}
else
MessageUtil.ShowWarning(message);
} }
DevExpress 中根据数据库字典动态生成卡式菜单 z的更多相关文章
- 根据数据库记录动态生成C#类及其公共属性并动态执行的解决方案
原文:根据数据库记录动态生成C#类及其公共属性并动态执行的解决方案 问题: C#中,想动态产生这么一个类: public class StatisticsData { public ...
- js—input框中输入数字,动态生成内容的方法
项目中需要在前端实现: 用户输入数字n,动态生成n个元素,删除n,自动清空n个元素(如图一): 用户输入数字n,失焦生成n个元素,再聚焦修改n,自动清空n个元素(如图二): 图一: 图二: 需求一实现 ...
- PHP 使用程序进行数据库字典文件生成 导出数据库字典
作为一个程序员肯定是不愿意写文档的!!! 尤其最麻烦的数据库字典文档 所以偷懒写了一个PHP程序来进行数据库字典导出 记录一下 以免以后忘记 //使用的是Laravel框架 可以转换成原生导出$ta ...
- 巨蟒django之权限7:动态生成一级&&二级菜单
内容回顾: . 权限的控制 . 表结构设计 存权限的信息 用户表 - name 用户名 - pwd 密码 - roles 多对多 角色表 - name - permissions 多对多 权限表 - ...
- 根据数据库内容动态生成html页面
之前使用了很多方法,但是都很复杂. 项目里包括了数据库的管理页面,对数据库进行修改(新增,插入,删除)等之后,在另一个页面使用. 使用时采用按下相应label弹出所有信息的方法,以html的形式将数据 ...
- PowerDesigner中利用数据库表反向生成PDM(jdk必须是32位)
第一步:创建一个空的PDM模型(选择对应的DBMS):File-->New 第二步:选择DataBase-->Configure Connections,配置即将连接的数据库 第三步:选择 ...
- 将android程序中的数据库导出到SD卡
private void copyDBToSDcrad() { String DATABASE_NAME = "数据库文件名"; String oldPath = "da ...
- 在后台代码中动态生成pivot项并设置EventTrigger和Action的绑定
最近在做今日头条WP的过程中,遇到需要动态生成Pivot项的问题.第一个版本是把几个频道写死在xaml里了,事件绑定也写在xaml里,每个频道绑定一个ObservableCollection<A ...
- 数据库表反向生成(一) MyBatis-generator与IDEA的集成
在Dao层,通过数据库表反向生成,可以节省我们很多的精力,把更多的精力投入复杂的业务中. 数据库表反向生成,指的是通过数据库如mysql中的库表schema生成dao层读写表的基础代码,包括model ...
随机推荐
- JsRender系列demo(5) for else
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- Jquery+Jquery-easyui的倒计时
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 简单易懂的现代魔法——Play Framework攻略3
接前文:http://www.cnblogs.com/Kassadin/p/4343682.html 目前为止,我们已经研究了Play Framework的体系结构以及Web应用程序的工作原理.本来今 ...
- 查找数N二进制中1的个数(JS版 和 Java版)
(function(){ function getOne(n) { var c = 0; for(var i = 0;i < 32;i ++){ if(((1 << i) & ...
- lintcode : 二叉树的层次遍历II
题目 二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, ...
- spring中的aware接口
1.实现了相应的aware接口,这个类就获取了相应的资源. 2.spring中有很多aware接口,包括applicationContextAware接口,和BeanNameAware接口. 实现了这 ...
- *Linux之rm命令
自己瞅: [root@winner ~]# rm --help//rm-->remove用法:rm [选项]... 文件... 删除 (unlink) 文件. -f, --force 强制删除. ...
- java23中设计模式
原文来自:http://zz563143188.iteye.com/blog/1847029 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design patt ...
- NDK(12)Jni常用函数
参考官方文档 http://docs.oracle.com/javase/7/docs/technotes/guides/jni/ http://docs.oracle.com/javase/7/do ...
- AVL的旋转
转自http://blog.csdn.net/gabriel1026/article/details/6311339 平衡二叉树在进行插入操作的时候可能出现不平衡的情况,AVL树即是一种自平衡的二叉树 ...