轉帖|使用教程|編輯:龔雪|2024-03-22 11:24:09.507|閱讀 114 次
概述:本文主要介紹在Winform開發中如何利用DevExpress的GridView實現表格列表內容分組展示,歡迎下載最新版工具體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在開發Winform界面的時會遇到需要對一些字段進行一些匯總的管理,如果在列表中能夠對表格列表中的內容進行分組展示,將比較符合預期,本文主要介紹在Winform開發中如何利用DevExpress的GridView實現該功能。
PS:給大家推薦一個C#開發可以用到的界面組件——DevExpress WinForms,它能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝任!
DevExpress技術交流群9:909157416 歡迎一起進群討論
我們來以ERP系統中的一個原料表格來介紹對表格數據匯總的處理,首先創建一個原料表用來測試,表的數據庫設計可以采用PowerDesigner等類似的建模工具設計,如下所示。
通過預覽生成SQL的方式,我們可以生成對應不同的數據庫的數據庫腳本,用于創建對應的數據庫表。
生成對應的數據表后,我們往里面填入一些測試的數據,用于實際的測試處理。
我們準備類別不同的數據寫入,為了方便測試,具體數據效果如下所示。
有了這些,我們就可以順利進行下面的代碼開發了。
在這里可以根據實際的需要,生成相關的基礎數據庫操作類,如Winform框架或者SqlSugar 開發框架的Winform前端,都可以直接生成對應的框架基礎代碼,這里以我們的SqlSugar 開發框架模式來開發對應的Winform界面。
由于我們開發一般是基于增量式的開發方式,因此可以一次性選擇新增的表進行生成底層框架的支持代碼,如下確定界面所示。
最終生成一個可以直接運行的項目整體框架方案。
如果我們是考慮增量式的整合在現有的項目上,那么可以把SugarProjectCore項目目錄里面的文件夾整個復制整合到已有的項目上即可。
它們的目錄結構已經根據不同的功能放在了不同的文件夾中了,如下圖所示。
例如,我們把它們整個復制放置到了對應項目目錄下,如下所示。
那么目前我們已有項目上就增加了對應的訪問數據庫的業務類所需要的模型、接口、具體實現類了。
接下來就是對Winform的界面進行生成了。
前面我們介紹了,這個案例介紹基于SqlSugar開發框架的實現,因此基于SqlSugar開發框架的Winform界面進行生成即可。生成的界面直接調用剛才的創建的基礎接口來請求數據和綁定處理,以及相關的導入導出、編輯、刪除等基礎操作。
上面的界面就是基于SqlSugar開發框架生成的Winform界面的時候,對界面中查詢條件、列表展示的字段,以及編輯界面的字段進行設計的處理,代碼生成工具根據這些設定進行界面代碼的生成。
生成的代碼,自動包含了列表展示和編輯等基礎界面功能,如下代碼文件所示。
我們把這些文件整合到已有的UI項目上,就可以實現表的界面代碼增量的生成了。
直接測試編譯運行,稍作調整,最終的界面效果如下所示。
以上的表格數據,只是常規的展示,并沒有實現分組的處理,我們增加一個復選框,用來設置分組處理的展示,如下界面所示。
在WInform界面中,生成的界面代碼包含了對數據的綁定顯示,如下就是對表的數據請求函數。
/// <summary> /// 獲取數據 /// </summary> /// <returns></returns> private async Task<IPagedResult<MaterialInfo>> GetData() { MaterialPagedDto pagerDto = null; if (advanceCondition != null) { pagerDto = new MaterialPagedDto(this.winGridViewPager1.PagerInfo); pagerDto = dlg.GetPagedResult(pagerDto); } else { //構建分頁的條件和查詢條件 pagerDto = new MaterialPagedDto(this.winGridViewPager1.PagerInfo) { //添加所需條件 Category = this.txtCategory.Text.Trim(), Code = this.txtCode.Text.Trim(), Name = this.txtName.Text.Trim(), Alias = this.txtAlias.Text.Trim(), UsePurpose = this.txtUsePurpose.Text.Trim(), SupplierSimple = this.txtSupplierSimple.Text.Trim(), Producer = this.txtProducer.Text.Trim(), }; //日期和數值范圍定義 } var result = await BLLFactory<IMaterialService>.Instance.GetListAsync(pagerDto); return result; }
以上就是根據界面的條件進行數據的條件查詢,并返回記錄集合。
在獲得記錄集合后,我們把它賦值給自定義的分頁控件組件,就可以實現相關數據的正常展示了。
//獲取分頁數據列表 var result = await GetData(); //設置所有記錄數和列表數據源 this.winGridViewPager1.PagerInfo.RecordCount = result.TotalCount; //需先于DataSource的賦值,更新分頁信息 this.winGridViewPager1.DataSource = result.Items;
為了實現分組的處理展示,我們需要判斷上面的復選框條件,進行分組條件和表達式的創建處理即可,如下代碼所示。
//增加匯總字段和顯示 var gridView1 = this.winGridViewPager1.gridView1; if (checkGroup.Checked) { this.winGridViewPager1.ShowLineNumber = false; gridView1.IndicatorWidth = 0; gridView1.OptionsView.ShowGroupExpandCollapseButtons = true;//顯示折疊的分組 gridView1.OptionsView.AllowCellMerge = true; //允許合并字段 gridView1.OptionsView.GroupDrawMode = GroupDrawMode.Standard; gridView1.GroupSummary.Clear(); gridView1.Columns["Category"].GroupIndex = 0;//對類別進行分組展示 var item = new GridGroupSummaryItem(); item.FieldName = "Id"; item.DisplayFormat = " (合計數量 = {0:n})"; item.SummaryType = DevExpress.Data.SummaryItemType.Count;//Sum、Average等 gridView1.GroupSummary.Add(item); gridView1.ExpandAllGroups(); } else { gridView1.GroupSummary.Clear(); this.winGridViewPager1.ShowLineNumber = true; gridView1.OptionsView.AllowCellMerge = false; }
以上就是對數據記錄進行分組的代碼,核心代碼就幾行,可以很容易實現我們所需要的分組效果,如下界面所示。
如果我們不需要合并,取消設置為false即可。
gridView1.OptionsView.AllowCellMerge = false;
以上就是我們介紹基于SqlSugar開發框架生成基礎代碼、界面代碼、以及實現分組處理展示的一些總結。
本文轉載自:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn