在參照一些行業(yè)系統(tǒng)軟件的時候,發(fā)現一個做的挺不錯的系統(tǒng)功能-系統(tǒng)參數管理,相當于把任何一個基礎的系統(tǒng)參數碎片化進行管理,每次可以讀取一個值進行管理,這樣有利于我們快速的處理業(yè)務需求,是一個挺好的功能。本篇隨筆模擬這個功能,基于SqlSugar開發(fā)框架的基礎上,利用代碼生成工具快速生成系統(tǒng)參數管理界面和相關的業(yè)務類生成。
1、參考和具體實現的效果對比
參照的界面效果如下所示。
最終基于SqlSugar的開發(fā)框架,基于DevExpress的界面效果,構建的Winform界面如下所示。
2、?快速構建系統(tǒng)參數管理界面及后臺業(yè)務代碼
為了實現業(yè)務代碼及UI界面的內容生成,我們首先要設計好數據庫,基于數據庫表,可以利用代碼生成工具Database2Sharp 快速生成相關的業(yè)務代碼和Winform界面代碼。
系統(tǒng)參數的信息,應該設計為包含一個大類參數目錄和一個具體的參數項目,如下基于SQLServer的數據庫表設計所示(基于PoweDesigner設計,便于生成Sql執(zhí)行)。
其中大類目錄如下設計所示,為了方便,設計為一個樹形結構的層次。
參數項目表設計如下所示。
生成相關的Sql ,在數據庫中構建好相關的表結構。
然后利用代碼生成工具生成相關的代碼即可。
打開代碼生成工具,并展開相關的數據庫表,由于我們選擇基于SqlSugar開發(fā)框架架構進行的界面生成,因此選擇對應的界面生成【SqlSugar框架Winform界面生成】。
?在彈出的【常規(guī)Winform界面生成】面板中,勾選相關的設置信息,定制UI界面,如下界面效果所示。
?利用代碼生成工具,默認會生成一個類似下面的設計窗體的界面效果。
?為了能夠展示多層級的參數目錄,我們需要在左側模仿做一個樹形列表,這樣才能更好的查看相關的參數信息,相當于把參數項目分類管理。
因此我們在生成的窗體界面上,增加SplitContainerControl的一個拆分面板區(qū)域的控件,并把左側放置樹形列表及查詢框,如下界面效果。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-422455.html
3、快速構建系統(tǒng)參數管理的后臺業(yè)務代碼
上面介紹的是Winform的界面生成,為了使得系統(tǒng)能夠順利的跑起來,我們還需要對相關的系統(tǒng)參數表目錄和項目訪問所需的業(yè)務代碼,一般的業(yè)務代碼都需要有CRUD等常規(guī)操作的代碼,不過還好基于框架的基礎上,我們只需要生成一個簡單的類,繼承自基類就默認具有了這些操作,不需要重復編寫代碼,簡化了代碼的處理并提高開發(fā)效率。
同樣的,我們利用現有表結構信息,基于代碼生成工具快是生成相關的業(yè)務類文件,合并到系統(tǒng)框架中就可以了。
選擇兩個剛創(chuàng)建的表:TB_SystemParams 、TB_SystemParamsDir,并填寫對應的主命名空間,如下所示。
?最后生成的代碼文件如下所示。
由于是基于框架的目錄機構生成的,因此直接復制Core目錄到解決方案項目上就可以了,如下所示。
復制過去后,對應業(yè)務表的實體類、接口類、實現類都一一設置好了相關的繼承關系,如下是具體業(yè)務實現類的代碼,是基于數據庫表結構信息生成的。
/// <summary> /// 系統(tǒng)參數配置 應用層服務接口實現 /// </summary> public class SystemParamsService : MyCrudService<SystemParamsInfo,string, SystemParamsPagedDto>, ISystemParamsService { //相關代碼 }
詳細類文件如下所示,生成了相關的排序條件、查詢條件等處理信息。
?由于這個系統(tǒng)界面比較簡單,因此我們不需要增加任何代碼。
我們再次回到UI界面的處理上來,由于默認我們生成的界面,都具有了分頁查詢及編輯明細的功能,因此這部分代碼我們不需要調整,我們額外增加了樹展示和過濾的功能,因此需要適當修改一下生成的界面代碼。
窗體界面的處理主邏輯如下所示。
/// <summary> /// 編寫初始化窗體的實現,可以用于刷新 /// </summary> public override void FormOnLoad() { InitSearchControl(); InitTree(); BindTree(); InitDictItem(); BindData(); }
標注紅色的部分是我們需要額外增加的代碼。
初始化樹的界面代碼如下所示,主要的邏輯就是創(chuàng)建顯示的列,以及確定好層次關系和實現拖動效果處理,以及對選中節(jié)點的事件處理。
/// <summary> /// 初始化樹控件 /// </summary> private void InitTree() { this.tree.Columns.Clear(); //控件擴展函數封裝處理 this.tree.CreateColumn("CategoryName", "系統(tǒng)參數目錄", 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; }; //初始化樹節(jié)點選擇事件 this.tree.FocusedNodeChanged += delegate (object sender, FocusedNodeChangedEventArgs e) { this.FocusedNodeChanged(); }; this.tree.MouseDoubleClick += (s, e) => { menu_EditType_Click(null, null); }; }
而對于樹節(jié)點的過濾,我們對查詢的輸入框架進行如下處理代碼即可。
/// <summary> /// 實現樹節(jié)點的過濾查詢 /// </summary> 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; }; }
觸發(fā)樹節(jié)點查詢,以及綁定樹數據源的處理如下代碼所示
/// <summary> /// 選中樹節(jié)點觸發(fā)的查詢處理 /// </summary> private void FocusedNodeChanged() { if (this.tree.FocusedNode != null) { BindData(); } } /// <summary> /// 綁定樹的數據源 /// </summary> private async void BindTree() { var result = await BLLFactory<ISystemParamsDirService>.Instance.GetAllAsync(); if (result != null) { this.tree.DataSource = result.Items; this.tree.ExpandAll(); } }
其中數據源的獲取,我們直接調用基類函數獲取對應的列表項目就可以了,如上的代碼
BLLFactory<ISystemParamsDirService>.Instance.GetAllAsync();
對于編輯參數明細的界面項目,我們如果需要微調界面,修改下即可。
?到此功能基本就完成了,整合編譯運行就可以出效果了。構建的Winform界面如下所示。
編輯明細部分的界面效果如下所示。
?以上就是基于SqlSugar開發(fā)框架的基礎上,利用代碼生成工具快速生成系統(tǒng)參數管理界面和相關的業(yè)務類生成的全部過程,希望對大家開發(fā)處理有所裨益。
?
SqlSugar開發(fā)框架介紹:https://www.iqidi.com/Framework/sugarIndex.htm?
系列文章:
《基于SqlSugar的開發(fā)框架的循序漸進介紹(1)--框架基礎類的設計和使用》
《基于SqlSugar的開發(fā)框架循序漸進介紹(2)-- 基于中間表的查詢處理》
《基于SqlSugar的開發(fā)框架循序漸進介紹(3)-- 實現代碼生成工具Database2Sharp的整合開發(fā)》
《基于SqlSugar的開發(fā)框架循序漸進介紹(4)-- 在數據訪問基類中對GUID主鍵進行自動賦值處理?》
《基于SqlSugar的開發(fā)框架循序漸進介紹(5)-- 在服務層使用接口注入方式實現IOC控制反轉》
《基于SqlSugar的開發(fā)框架循序漸進介紹(6)-- 在基類接口中注入用戶身份信息接口?》
《基于SqlSugar的開發(fā)框架循序漸進介紹(7)-- 在文件上傳模塊中采用選項模式【Options】處理常規(guī)上傳和FTP文件上傳》
?《基于SqlSugar的開發(fā)框架循序漸進介紹(8)-- 在基類函數封裝實現用戶操作日志記錄》
《基于SqlSugar的開發(fā)框架循序漸進介紹(9)-- 結合Winform控件實現字段的權限控制》
《基于SqlSugar的開發(fā)框架循序漸進介紹(10)-- 利用axios組件的封裝,實現對后端API數據的訪問和基類的統(tǒng)一封裝處理》
《基于SqlSugar的開發(fā)框架循序漸進介紹(11)-- 使用TypeScript和Vue3的Setup語法糖編寫頁面和組件的總結》
《基于SqlSugar的開發(fā)框架循序漸進介紹(12)-- 拆分頁面模塊內容為組件,實現分而治之的處理》
《基于SqlSugar的開發(fā)框架循序漸進介紹(13)-- 基于ElementPlus的上傳組件進行封裝,便于項目使用》
《基于SqlSugar的開發(fā)框架循序漸進介紹(14)-- 基于Vue3+TypeScript的全局對象的注入和使用》
?《基于SqlSugar的開發(fā)框架循序漸進介紹(15)-- 整合代碼生成工具進行前端界面的生成》
《基于SqlSugar的開發(fā)框架循序漸進介紹(16)-- 工作流模塊的功能介紹》
《基于SqlSugar的開發(fā)框架循序漸進介紹(17)-- 基于CSRedis實現緩存的處理》
?《基于SqlSugar的開發(fā)框架循序漸進介紹(18)-- 基于代碼生成工具Database2Sharp,快速生成Vue3+TypeScript的前端界面和Winform端界面》
《基于SqlSugar的開發(fā)框架循序漸進介紹(19)-- 基于UniApp+Vue的移動前端的功能介紹》
《基于SqlSugar的開發(fā)框架循序漸進介紹(20)-- 在基于UniApp+Vue的移動端實現多條件查詢的處理》
《基于SqlSugar的開發(fā)框架循序漸進介紹(21)-- 在工作流列表頁面中增加一些轉義信息的輸出,在后端進行內容轉換》
?《基于SqlSugar的開發(fā)框架循序漸進介紹(22)-- Vue3+TypeScript的前端工作流模塊中實現統(tǒng)一的表單編輯和表單詳情查看處理?》
《基于SqlSugar的開發(fā)框架循序漸進介紹(23)-- Winform端管理系統(tǒng)中平滑增加對Web API對接的需求》
《基于SqlSugar的開發(fā)框架循序漸進介紹(24)-- 使用Serialize.Linq對Lambda表達式進行序列化和反序列化?》
?基于SqlSugar的開發(fā)框架循序漸進介紹(25)-- 基于SignalR實現多端的消息通訊
基于SqlSugar的開發(fā)框架循序漸進介紹(26)-- 實現本地上傳、FTP上傳、阿里云OSS上傳三者合一處理
基于SqlSugar的開發(fā)框架循序漸進介紹(27)-- 基于MongoDB的數據庫操作整合
基于SqlSugar的開發(fā)框架循序漸進介紹(28)-- 快速構建系統(tǒng)參數管理界面文章來源:http://www.zghlxwxcb.cn/news/detail-422455.html
?
到了這里,關于基于SqlSugar的開發(fā)框架循序漸進介紹(28)-- 快速構建系統(tǒng)參數管理界面的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!