您的位置:首页 >资讯 > 科技 >

基于SqlSugar的开发框架循序渐进介绍(28)-- 快速构建系统参数管理界面 世界快资讯

2023-04-23 15:10:30    来源:博客园

在参照一些行业系统软件的时候,发现一个做的挺不错的系统功能-系统参数管理,相当于把任何一个基础的系统参数碎片化进行管理,每次可以读取一个值进行管理,这样有利于我们快速的处理业务需求,是一个挺好的功能。本篇随笔模拟这个功能,基于SqlSugar开发框架的基础上,利用代码生成工具快速生成系统参数管理界面和相关的业务类生成。

1、参考和具体实现的效果对比

参照的界面效果如下所示。

最终基于SqlSugar的开发框架,基于DevExpress的界面效果,构建的Winform界面如下所示。


(资料图片)

2、快速构建系统参数管理界面及后台业务代码

为了实现业务代码及UI界面的内容生成,我们首先要设计好数据库,基于数据库表,可以利用代码生成工具Database2Sharp 快速生成相关的业务代码和Winform界面代码。

系统参数的信息,应该设计为包含一个大类参数目录和一个具体的参数项目,如下基于SQLServer的数据库表设计所示(基于PoweDesigner设计,便于生成Sql执行)。

其中大类目录如下设计所示,为了方便,设计为一个树形结构的层次。

参数项目表设计如下所示。

生成相关的Sql ,在数据库中构建好相关的表结构。

然后利用代码生成工具生成相关的代码即可。

打开代码生成工具,并展开相关的数据库表,由于我们选择基于SqlSugar开发框架架构进行的界面生成,因此选择对应的界面生成【SqlSugar框架Winform界面生成】。

在弹出的【常规Winform界面生成】面板中,勾选相关的设置信息,定制UI界面,如下界面效果所示。

利用代码生成工具,默认会生成一个类似下面的设计窗体的界面效果。

为了能够展示多层级的参数目录,我们需要在左侧模仿做一个树形列表,这样才能更好的查看相关的参数信息,相当于把参数项目分类管理。

因此我们在生成的窗体界面上,增加SplitContainerControl的一个拆分面板区域的控件,并把左侧放置树形列表及查询框,如下界面效果。

3、快速构建系统参数管理的后台业务代码

上面介绍的是Winform的界面生成,为了使得系统能够顺利的跑起来,我们还需要对相关的系统参数表目录和项目访问所需的业务代码,一般的业务代码都需要有CRUD等常规操作的代码,不过还好基于框架的基础上,我们只需要生成一个简单的类,继承自基类就默认具有了这些操作,不需要重复编写代码,简化了代码的处理并提高开发效率。

同样的,我们利用现有表结构信息,基于代码生成工具快是生成相关的业务类文件,合并到系统框架中就可以了。

选择两个刚创建的表:TB_SystemParams 、TB_SystemParamsDir,并填写对应的主命名空间,如下所示。

最后生成的代码文件如下所示。

由于是基于框架的目录机构生成的,因此直接复制Core目录到解决方案项目上就可以了,如下所示。

复制过去后,对应业务表的实体类、接口类、实现类都一一设置好了相关的继承关系,如下是具体业务实现类的代码,是基于数据库表结构信息生成的。

///     /// 系统参数配置 应用层服务接口实现    ///     public class SystemParamsService : MyCrudService, ISystemParamsService  {       //相关代码  }

详细类文件如下所示,生成了相关的排序条件、查询条件等处理信息。

由于这个系统界面比较简单,因此我们不需要增加任何代码。

我们再次回到UI界面的处理上来,由于默认我们生成的界面,都具有了分页查询及编辑明细的功能,因此这部分代码我们不需要调整,我们额外增加了树展示和过滤的功能,因此需要适当修改一下生成的界面代码。

窗体界面的处理主逻辑如下所示。

///         /// 编写初始化窗体的实现,可以用于刷新        ///         public override void FormOnLoad()        {InitSearchControl();            InitTree();            BindTree();InitDictItem();            BindData();        }

标注红色的部分是我们需要额外增加的代码。

初始化树的界面代码如下所示,主要的逻辑就是创建显示的列,以及确定好层次关系和实现拖动效果处理,以及对选中节点的事件处理。

///         /// 初始化树控件        ///         private void InitTree()        {            this.tree.Columns.Clear();            //控件扩展函数封装处理            this.tree.CreateColumn("CategoryName", "系统参数目录", 160, true);            this.tree.InitTree(Id_FieldName, "PID", null, false, false);            this.tree.OptionsDragAndDrop.DragNodesMode = DragNodesMode.Single;            //设置树的图标集合及逐级图标            this.tree.SelectImageList = this.imageList1;            this.tree.CustomDrawNodeImages += (object sender, CustomDrawNodeImagesEventArgs e) =>            {                int maxCount = this.imageList1.Images.Count;                var index = e.Node.Level < maxCount ? e.Node.Level : 0;                e.SelectImageIndex = index;            };            //初始化树节点选择事件            this.tree.FocusedNodeChanged += delegate (object sender, FocusedNodeChangedEventArgs e)            {                this.FocusedNodeChanged();            };            this.tree.MouseDoubleClick += (s, e) => { menu_EditType_Click(null, null); };        }

而对于树节点的过滤,我们对查询的输入框架进行如下处理代码即可。

///         /// 实现树节点的过滤查询        ///         private void InitSearchControl()        {            this.searchControl1.Client = this.tree;            this.tree.FilterNode += (object sender, FilterNodeEventArgs e) =>            {                if (tree.DataSource == null)                    return;                string nodeText = e.Node.GetDisplayText("CategoryName");//参数填写FieldName                  if (string.IsNullOrWhiteSpace(nodeText))                    return;                bool isExist = nodeText.IndexOf(searchControl1.Text, StringComparison.OrdinalIgnoreCase) >= 0;                if (isExist)                {                    var node = e.Node.ParentNode;                    while (node != null)                    {                        if (!node.Visible)                        {                            node.Visible = true;                            node = node.ParentNode;                        }                        else                            break;                    }                }                e.Node.Visible = isExist;                e.Handled = true;            };        }

触发树节点查询,以及绑定树数据源的处理如下代码所示

///         /// 选中树节点触发的查询处理        ///         private void FocusedNodeChanged()        {            if (this.tree.FocusedNode != null)            {                BindData();            }        }        ///         /// 绑定树的数据源        ///         private async void BindTree()        {            var result = await BLLFactory.Instance.GetAllAsync();            if (result != null)            {                this.tree.DataSource = result.Items;                this.tree.ExpandAll();            }        }

其中数据源的获取,我们直接调用基类函数获取对应的列表项目就可以了,如上的代码

BLLFactory<ISystemParamsDirService>.Instance.GetAllAsync();

对于编辑参数明细的界面项目,我们如果需要微调界面,修改下即可。

到此功能基本就完成了,整合编译运行就可以出效果了。构建的Winform界面如下所示。

编辑明细部分的界面效果如下所示。

以上就是基于SqlSugar开发框架的基础上,利用代码生成工具快速生成系统参数管理界面和相关的业务类生成的全部过程,希望对大家开发处理有所裨益。

SqlSugar开发框架介绍:https://www.iqidi.com/Framework/sugarIndex.htm

系列文章:

《基于SqlSugar的开发框架的循序渐进介绍(1)--框架基础类的设计和使用》

《基于SqlSugar的开发框架循序渐进介绍(2)-- 基于中间表的查询处理》

《基于SqlSugar的开发框架循序渐进介绍(3)-- 实现代码生成工具Database2Sharp的整合开发》

《基于SqlSugar的开发框架循序渐进介绍(4)-- 在数据访问基类中对GUID主键进行自动赋值处理》

《基于SqlSugar的开发框架循序渐进介绍(5)-- 在服务层使用接口注入方式实现IOC控制反转》

《基于SqlSugar的开发框架循序渐进介绍(6)-- 在基类接口中注入用户身份信息接口》

《基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传》

《基于SqlSugar的开发框架循序渐进介绍(8)-- 在基类函数封装实现用户操作日志记录》

《基于SqlSugar的开发框架循序渐进介绍(9)-- 结合Winform控件实现字段的权限控制》

《基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理》

《基于SqlSugar的开发框架循序渐进介绍(11)-- 使用TypeScript和Vue3的Setup语法糖编写页面和组件的总结》

《基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理》

《基于SqlSugar的开发框架循序渐进介绍(13)-- 基于ElementPlus的上传组件进行封装,便于项目使用》

《基于SqlSugar的开发框架循序渐进介绍(14)-- 基于Vue3+TypeScript的全局对象的注入和使用》

《基于SqlSugar的开发框架循序渐进介绍(15)-- 整合代码生成工具进行前端界面的生成》

《基于SqlSugar的开发框架循序渐进介绍(16)-- 工作流模块的功能介绍》

《基于SqlSugar的开发框架循序渐进介绍(17)-- 基于CSRedis实现缓存的处理》

《基于SqlSugar的开发框架循序渐进介绍(18)-- 基于代码生成工具Database2Sharp,快速生成Vue3+TypeScript的前端界面和Winform端界面》

《基于SqlSugar的开发框架循序渐进介绍(19)-- 基于UniApp+Vue的移动前端的功能介绍》

《基于SqlSugar的开发框架循序渐进介绍(20)-- 在基于UniApp+Vue的移动端实现多条件查询的处理》

《基于SqlSugar的开发框架循序渐进介绍(21)-- 在工作流列表页面中增加一些转义信息的输出,在后端进行内容转换》

《基于SqlSugar的开发框架循序渐进介绍(22)-- Vue3+TypeScript的前端工作流模块中实现统一的表单编辑和表单详情查看处理》

《基于SqlSugar的开发框架循序渐进介绍(23)-- Winform端管理系统中平滑增加对Web API对接的需求》

《基于SqlSugar的开发框架循序渐进介绍(24)-- 使用Serialize.Linq对Lambda表达式进行序列化和反序列化》

基于SqlSugar的开发框架循序渐进介绍(25)-- 基于SignalR实现多端的消息通讯

基于SqlSugar的开发框架循序渐进介绍(26)-- 实现本地上传、FTP上传、阿里云OSS上传三者合一处理

基于SqlSugar的开发框架循序渐进介绍(27)-- 基于MongoDB的数据库操作整合

基于SqlSugar的开发框架循序渐进介绍(28)-- 快速构建系统参数管理界面

标签:

相关阅读

精彩放送

手机共享网络怎么连接电脑(手机共享网络怎么连接不上)

天天热资讯!安徽征集志愿录取结果什么时候出来2020_安徽征集志愿录取结果什么时候出来

买港险有方法!Sun Life香港永明金融首年保费立省约65%-微动态

热门:2023年全国象棋快棋锦标赛开幕

环球视点!周至司法拍卖|119平米39.86万!想买房的看过来~

焦点热门:聚焦目标任务 注重实际成效——各部门各单位深入开展学习贯彻习近平新时代中国...

观天下!淄博烧烤出圈!交行精准金融支持为“烧烤经济”添炭火

【世界速看料】建设银行黄金行情分析软件 V7.07 免费版怎么样?建设银行黄金行情分析软...

电视剧楚乔传讲的是什么时期?楚乔传皇帝为什么不杀白笙?

开端叶子警官扮演者是谁哪里人?开端结局真相是什么?

国家邮政局:一季度我国邮政行业寄递业务量达341.7亿件 当前速递

qq如何改密码怎么修改_qq如何改密码|环球最资讯

铁路部门加大五一假期运力投放,增开旅客列车1500多列-通讯

孕妇钙片什么时候吃最好啊_孕妇钙片什么时候吃最好 环球信息

世界新动态:从无到有、从小到大、从弱到强 数字产业集群加速发展

环球今头条!孩子取小名字大全集_孩子名字大全

【天天新要闻】2022按摩沙发十大品牌排行榜_按摩沙发哪个牌子好

马里中部发生自杀式炸弹袭击事件 造成9人死亡60余人受伤

阅读红色经典图书 培养良好阅读习惯_每日热点

幽姿不入少年场的意思_幽姿不入少年场

360l软件管家下载_360软件管家免费下载 环球头条

今日要闻!原单货是什么意思

惠安公安:擦亮产业“金名片” 奏好发展“交响曲” 当前速递

【全球速看料】刑事案件到检察院法院要多久

机动车违章逆行怎么处罚的-天天观速讯

【天天快播报】鱼子酱变质了吗?_适合圣诞节送男朋友的礼物

怎样种好茄子 种茄子的方法|环球资讯

qf是什么意思_qf

1942年,弘一法师的“圆寂照”,右肋而卧遗容神态甚是安详

一山一水皆画卷——聚焦第54个世界地球日

常州大学官网_常州规划局网站|全球球精选

世界快看:我有迷魂招不得雄鸡一声天下白运用了什么修辞手法_我有迷魂招不得雄鸡一声天下白

北京这项普法工作,获评全国创新案例!

环球百事通!perhaps和may be区别_perhaps和maybe的区别

商业联盟!灰熊击败湖人!狄龙多次挑衅詹姆斯,老詹不搭理_全球关注

最新快讯!我时常消极,又觉得生活美好

速读:土豆怎样种好_如何种植土豆

福建省福州市2023-04-23 00:07发布雷电黄色预警 环球最资讯

世界热推荐:4月23日,苍穹上演金星伴月!19时11分在广州可观测

《边坡工程》中英文MOOC 天天热门

孙颖莎3局反超感恩马琳,樊振东落败怪王皓,刘国梁仍要包揽金牌|精彩看点

全球观察:孔源村

2023上海车展:新款宝马X5 M实车亮相 全球热文

韩国电影纶理片r级在线观看-茵茵电影在线观看

铺地锦算法的由来-铺地锦算法-世界看热讯

全球简讯:千亿规模公募股权变更!

绦虫_关于绦虫介绍

北京:今年小学以登记入学为主 单校划片和多校划片相结合

逆战名字符号大全(逆战名字特殊符号乄) 焦点快播

萌宝小说推荐_萌宝小说

【全球新要闻】内冷树脂商品报价动态(2023-04-22)

每日消息!“温泉之都”汝城“三月三”瑶畲文化旅游节开幕

天天最新:斯登堡 J·von_关于斯登堡 J·von简介

穿山甲吃什么食物视频_穿山甲吃什么食物

全球新消息丨响应面分析_响应网

帕金森氏症能治愈吗_帕金森氏症

每日速看!雪菊花和西洋参能一起泡吗_雪菊花

西安高新公安唐延路派出所多措并举确保“警社共治”工作走深向实 环球热文

蒸鸡要焯水吗 蒸鸡是否要焯水

首次报考frm需要注意什么?备考资料用哪些?

最资讯丨一季度交通运输行业多项统计指标正增长

神农架迎来川金丝猴新生命 进一步优化川金丝猴生存环境

怎样种好石斛 种植石斛的方法

当前讯息:“新三样”火爆折射出口结构升级

各地多措并举加强森林草原火灾防控-全球报道

展现包容性:《美末》剧版第3集"男男爱"将角逐艾美奖

海军成立74周年官方宣传片《蛟龙行动》 全球聚看点

铅山县气象台发布大风蓝色预警信号【IV级/一般】【2023-04-21】|每日时讯

海报 | 4•22世界地球日:N种方式保护地球 环球快播报

法国知名钢琴家理查德·克莱德曼:喜欢中国的音乐

天天头条:“中国好故事”网络国际传播精品案例评选结果公布

市教育局组织开展初中“强课提质 送教助研”活动

在科学岛上追逐航天梦想

天天新消息丨世界地球日丨卫星视角下,这些地方变美了!

迎接世界地球日 多地中小学、幼儿园开展丰富多彩主题活动

读报|4月22日《三湘都市报》版面速览_天天日报

一季度旅游产品和景点门票在线销售额同比增长115.8% 世界最新

【天天时快讯】2023年国家助学贷款免息及本金延期偿还政策解析 这些问题需关注

观点:华厦眼科:公司专注于眼科专科医疗服务,是中国大型眼科医疗连锁集团

【环球快播报】国家外汇管理局以多项便利化政策促进对外贸易增长

公寓房间什么时候出 公测上线时间预告

芜湖的“三小时圈”,有多大?

西媒:中巴开启友好合作新阶段

2023中国网络媒体论坛在南京举行 环球热门

甘肃:组团出海拓市场 专题推介促合作

外交公寓开启“我的市集”活动 多家北京老字号展示特色产品 世界视讯

世界今日讯!成都石象湖介绍_成都石象湖简介

条件关系的关联词句子_条件关系的关联词

汽车市场迎变局,需求推动产业加速重构

第五届“中国华服日”活动多地联动举办

世界讯息:比已知更早?美政府机密文件泄露或从去年10月始

ST大集:截至2023年4月20日,公司股东总户数为141,998户

每日视点!中国农科院水稻种质资源精准鉴定取得新进展

第五届农科开放日推动科技科普惠农_环球热文

深化基础教育课程改革 建立健全实验区建设长效机制 焦点短讯

围棋怎么算输赢图解_围棋怎么算输赢

当前热讯:上市公司也“追星”:买张坤李晓星等旗下基金,有的腰斩有的赚6000万

恐怖广播讲了什么_如何评价恐怖广播这本书

俄媒:俄外交官称,俄可能考虑在西部边境部署中程和远程弹道导弹

世界焦点!贵阳至南宁高铁龙里北至荔波段启动联调联试

答应我:等你老了,少穿运动鞋,多穿这些平底鞋,优雅时髦还好搭|当前快报

二十道简单易做家常菜_快手菜家常菜做法大全

世界热点!克罗地亚媒体:科瓦契奇经纪人抵达伦敦,会和曼城谈转会

突发!因涉嫌职场霸凌 英国副首相兼司法大臣宣布辞职_天天快报

环球热讯:“红景思源 薪火相传”!青岛市少先队“推优入团”培训活动在红景新区举行

img中的src是什么_img src中文是什么意思-世界新动态

国家房屋拆迁补偿规定_房改房拆迁补偿规定 焦点速看

最新资讯:七位数是几万