当前位置: 首页 > news >正文

WinForm应用实战开发指南 - 如何用DevExpress实现表格列表内容分组展示?

在开发Winform界面的时会遇到需要对一些字段进行一些汇总的管理,如果在列表中能够对表格列表中的内容进行分组展示,将比较符合预期,本文主要介绍在Winform开发中如何利用DevExpress的GridView实现该功能。

PS:给大家推荐一个C#开发可以用到的界面组件——​DevExpress WinForms​,它能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

DevExpress新旧版本帮助文档获取可点击这篇文章查看——>《界面控件DevExpress v26.1帮助文档大全(CHM版本)》

准备数据表和一些数据

我们来以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开发框架生成基础代码、界面代码、以及实现分组处理展示的一些总结。

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

http://www.jsqmd.com/news/1235674/

相关文章:

  • 「盘点」开发工具PyCharm全新升级的新UI(一)
  • Java常用 Date 时间格式化、Calender日历、正则表达式的用法
  • 自动驾驶核心算法盘点|目标跟踪与轨迹预测篇
  • ROS2 Navigation2:构建工业级机器人导航系统的3层架构设计哲学
  • ASP.NET MVC角色管理实战:从入门到高级应用
  • Symbolica高级技巧:10个提升表达式处理效率的实用方法
  • 煊荣科技,电信增值业务的下半场——从流量红利到存量博弈 - 界川
  • 深度解析 CopilotKit:构建你自己的 AI 原生应用基础设施
  • 专精特新中小企业复审认定标准是怎样的?专精特新复核注意事项
  • 纹渊 HarmonyOS 7 工程实战(14):AI 生成图回填到 3D 材质的异步链路
  • 北京百达翡丽官方售后服务中心|官方售后电话及地址权威公告(2026年7月最新) - 百达翡丽售后服务官网
  • 天气丹同源原料供应内幕:B端进货老板必看的工艺公差与验货底牌
  • 如何用超星学习通签到工具3步告别签到烦恼?
  • efaqa-corpus-zh vs 原始语料库:哪个更适合你的LLM微调项目?终极对比指南
  • 国产化落地避坑 · 干货向|Oracle 迁金仓 KES,我把外连接消除排在隐性陷阱第一位
  • 云南野生菌科普与销售系统
  • 深入解析USB控制器寄存器:从FIFO配置到端点控制实战
  • Java JDK版本选择策略与LTS长期支持解析
  • 鸿蒙 ArkTS 实战:Pet Boarding Booking 从宠物寄养预约到生活服务工具完整解析
  • 5分钟彻底解决重复文件困扰:Czkawka全能磁盘清理神器终极指南
  • 2026年7月甘井子区靠谱的财务公司避坑指南:大连中小企业从低价代账转向合规财税托管 - 资讯速览
  • 【小程序毕业设计】基于微信小程序的订餐配送一体化服务平台 外卖订单追踪与商家营收统计管理系统(源码+文档+远程调试,全bao定制等)
  • 一些杂七杂八的记录
  • 常州钻石回收店哪家好?2026资质甄选与出手时机攻略 - 奢侈品回收评测
  • OpenCV-Python实战(12)——一文详解AR增强现实
  • 渣汁分离原汁机三段精榨,出渣干爽不浪费每滴食材
  • 2026小提琴新手选购避坑指南!5款高性价比小提琴推荐不花冤枉钱
  • 如何在Windows、Linux和macOS上使用ipatool下载iOS应用包:完整指南
  • 终极Wand-Enhancer完整指南:三步解锁Wand专业版免费体验
  • 项目文档:基于MATLAB图像处理的肾结石超声影像辅助检测系统设计与实现