首页 / 历史 / 史学苑 / 正文

数据库界面设计(WinForm界面开发—轻松实现菜单列表的动态个性化配置管理)

放大字体  缩小字体 来源:佩佩罗梅罗 2026-04-18 01:04  浏览次数:5

在我们一般的应用系统里面,由于系统是面向不同类型的用户,我们所看到的菜单会越来越多,多一点的甚至上百个,但是我们实际工作接触的菜单可能就是那么几个,那么对于这种庞大的菜单体系,寻找起来非常不便。因此对菜单的个性化配置就显得尤为重要,本文就是基于这样的理念,提供用户对可见菜单进行一个动态配置,只选自己喜欢、常用的菜单显示出来即可,菜单的配置存储在数据库里面,在不同的客户端体验都是一样。本文主要介绍实现这样的功能的一个完整思路,部分代码逻辑可供参考。

一、 菜单列表的动态个性化配置的过程

例如我们在左侧根据用户权限展示相关的菜单信息,动态生成整个列表展示,大致的界面效果如下所示。

通过配置功能,我们让用户进入一个配置管理界面,在其中配置显示自己感兴趣的菜单,然后进行保存即可,保存后同时刷新界面的功能菜单显示。

上面介绍了大概的界面效果,有了参考,我们可以把它的实现思路通过代码实现出来。

首先我们需要了解,用户配置可以通过XML保存在本地,也可以通过数据库存储保存在服务器,后者在分布式的客户端的时候,可以处处一样,这样就不会造成体验上的差异,因此我们这里采用存储在数据库的方案。

首先我们先定义一个存储的参数类,这个是使用这个组件所必须的存储对象信息,如下代码所示。

/// <summary>/// 用来控制人员管理显示菜单的参数配置/// </summary>public class UserMenuParameter{[DefaultValue("")][Description("用户ID")]public string UserID { get; set; }[Description("用户设置可见的菜单")]public Dictionary<string, bool> VisibleDict { get; set; }}

然后在配置管理界面窗体里面,初始化这几个对象,如下代码所示。

// PortableStorage: 在运行程序目录创建一个setting的文件记录参数数据// DatabaseStorage:在数据库TB_UserParameter表存储用户配置参数store = new DatabaseStorage(LoginUserInfo.ID);settings = new SettingsProvider(store);parameter = settings.GetSettings<UserMenuParameter>();

2. 配置管理界面的实现

我们这个界面的定义代码如下所示。

在显示菜单前,我们先介绍一下功能菜单显示的规则,仅当参数存在对应记录,并且该记录显式设置不可见,菜单才不可见,否则默认菜单是可以看到的。

显示菜单的相关处理逻辑,就是根据上面的判断,然后确定是否勾选记录,如下代码所示。

参数的保存操作如下所示。

/// <summary>/// 保存用户配置信息/// </summary>private void btnOK_Click(object sender, EventArgs e){//获取用户勾选的树列表,存放在字典集合里面var dict = new Dictionary<string, bool>();foreach(TreeNode node in this.treeView1.Nodes){GetTreeSelection(node, dict);}try{//重新获取参数信息,并设置新值后保存parameter = settings.GetSettings<UserMenuParameter>();parameter.VisibleDict = dict;parameter.UserID = LoginUserInfo.ID;settings.SaveSettings<UserMenuParameter>(parameter);ProcessDataSaved(sender, e);//触发外部事件this.DialogResult = System.Windows.Forms.DialogResult.OK;}catch (Exception ex){LogHelper.Error(ex);MessageDxUtil.ShowError(ex.Message);return;}}

以上处理完成后,我们在主界面的工具栏右键菜单添加一个菜单项,用来进入配置界面的,如下逻辑代码所示。

private void tool_MenuSetting_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e){MenuSetting();}/// <summary>/// 配置菜单项/// </summary>private void MenuSetting(){FrmMenuSetting dlg = new FrmMenuSetting();dlg.onDataSaved += (s, arg) =>{//用户保存参数后,提示用户更新树形列表InitToolbar();};dlg.ShowDialog();}

另外,我们主界面的树形列表,也要根据配置参数的信息作相关的调整,如果用户配置了不显示某个菜单,那么主界面也要根据配置参数控制显示。

以上就是整个菜单列表的动态个性化配置管理的整体思路和实现步骤代码,主要的界面考量还是以用户的视觉来考虑界面的布局和功能,如果在几百个菜单项中寻找几个常用的菜单,每次是一个比较耗时无聊的操作,因此提供一个个性化的界面,根据工作情况的不同,显示一些和自己相关的功能即可。

那么配置维护界面还是差不多,只是我们控制工具栏的显示逻辑有所不同而已,对于RibbonPage及其功能菜单的动态生成处理如下所示。

例如有些参数的配置管理,可以统一使用一个配置管理界面进行维护,如我之前的随笔介绍的界面功能一样。

本文转载自博客园-伍华聪

打赏
0相关评论
热门搜索排行
精彩图片
友情链接
声明:本站信息均由用户注册后自行发布,本站不承担任何法律责任。如有侵权请告知立立即做删除处理。
违法不良信息举报邮箱:115904045
头条快讯网 版权所有
中国互联网举报中心