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

1、准备数据表和一些数据

我们来以ERP系统中的一个原料表格来介绍我们对表格数据汇总的处理,首先创建一个原料表用来测试,表的数据库设计可以采用PowerDesigner等类似的建模工具设计,如下所示。

通过预览生成SQL的方式,我们可以生成对应不同的数据库的数据库脚本,用于创建对应的数据库表。

生成对应的数据表后,我们往里面填入一些测试的数据,用于实际的测试处理。

我们准备类别不同的数据写入,为了方便测试,具体数据效果如下所示。

有了这些,我们就可以顺利进行下面的代码开发了。

2、基于具体框架生成基础数据库操作类

在这里可以根据我们实际的需要,生成相关的基础数据库操作类,如我的Winform框架或者SqlSugar 开发框架的Winform前端,都可以直接生成对应的框架基础代码,我们这里以我们的SqlSugar 开发框架模式来开发对应的Winform界面。

由于我们开发一般是基于增量式的开发方式,因此我们可以一次性选择我们新增的表进行生成底层框架的支持代码,如下确定界面所示。

最终生成一个可以直接运行的项目整体框架方案。

如果我们是考虑增量式的整合在我们现有的项目上,那么我们可以把SugarProjectCore项目目录里面的文件夹整个复制整合到我们已有的项目上即可。

它们的目录结构已经根据不同的功能放在了不同的文件夹中了,如下图所示。

例如,我们把它们整个复制放置到了对应项目目录下,如下所示。

那么目前我们已有项目上就增加了对应的访问数据库的业务类所需要的模型、接口、具体实现类了。

接下来就是对Winform的界面进行生成了。

3、生成相关的界面,并实现分组的特殊处理

前面我们介绍了,这个案例介绍基于我们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开发框架生成基础代码、界面代码、以及实现分组处理展示的一些总结。

在Winform系统开发中,对表格列表中的内容进行分组展示的更多相关文章

  1. SNF开发平台WinForm之一-开发-单表表格编辑管理页面-SNF快速开发平台3.3-Spring.Net.Framework

    1.1运行效果: 1.2开发实现: 1.2.1          首先在数据库中创建需要开发的数据表,在代码生成器中进行配置连接数据库. 代码生成器的Config.xml文件配置如下节点: 1.2.2 ...

  2. [课程设计]Scrum 2.1 多鱼点餐系统开发进度(下单列表布局)

    [课程设计]Scrum 2.1 多鱼点餐系统开发进度(下单列表布局) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店 ...

  3. 【转】一张图解析FastAdmin中的表格列表的功能

     一张图解析FastAdmin中的表格列表的功能 功能描述请根据图片上的数字索引查看对应功能说明. 1.时间筛选器如果想在搜索栏使用时间区间进行搜索,则可以在JS中修改修改字段属性,如 {field: ...

  4. [课程设计]Scrum 1.7 多鱼点餐系统开发进度(点餐菜式内容添加及美化)

    [课程设计]Scrum 1.7 多鱼点餐系统开发进度(点餐菜式内容添加及美化) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题 ...

  5. 从下拉菜单拖拽一个元素 出来,插入到页面中的app 列表中

    1,实现功能:从下拉菜单拖拽一个元素 出来,插入到页面中的app 列表中 并实现app向后移动一个元素的位置: 2.实现思路: 01.遍历下拉菜单,添加拖拽方法,实现位置移动功能: 02.遍历app列 ...

  6. python中如何删除列表中的所有元素

    今天写代码的时候遇到一个小问题,Python中要删除列表中的所有元素.Python本身就提供了pop.remove.del这些删除的函数.我想着用循环实现,结果很麻烦.几番周折上了stackoverf ...

  7. 一张图解析FastAdmin中的表格列表的功能

    大图: 1.默认生成的CRUD是没有菜单名称和描述显示的,如果需要显示则可以在后台修改,权限管理->菜单规则,给对应菜单的添加上备注信息后即可显示,支持HTML 2.TAB过滤选项卡 在一键生成 ...

  8. 循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展示和字段转义处理

    在我们一般开发的系统界面里面,列表页面是一个非常重要的综合展示界面,包括有条件查询.列表展示和分页处理,以及对每项列表内容可能进行的转义处理,本篇随笔介绍基于Vue +Element基础上实现表格列表 ...

  9. C++中的初始化列表中可以对那些变量或对象进行初始化

    构造函数与其函数体之间可以添加初始化列表,能对某些对象进行初始化.格式为 类名() : 变量1(参数1),变量2(参数2) { } 1.     父类的对象的构造必须在初始化列表中,如: 子类名(): ...

  10. python中循环删除列表中元素时的坑!

    循环删除列表中元素时千万别用正序遍历,一定要用反序遍历! 废话不多说,先上案例代码: def test(data): for i in data: data.remove(i) return data ...

随机推荐

  1. 【uniapp】【外包杯】学习笔记day04 | 学习模板+vue相关知识+环境搭建

    没啥好说的,人与人的悲欢并不相同,我只觉得吵闹. 好烦啊,虽然不应该总说一些低气压的话,不过目前预见的就是有很多工作要做,并且对于完成的希望也有点没有,就这样吧,没啥好说的. 昨天做了python的作 ...

  2. 【Javaweb】Servlet十 | HttpServletResponse类和HttpServletRequest类

    HttpServletResponse类的作用 HttpServletResponse类和HttpServletRequest类一样.每次请求进来,Tomcat服务器都会创建一个Response对象传 ...

  3. 介绍一个我开源的项目:一键部署 VictoriaMetrics 群集

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我实在是非常喜欢这个强大的 metrics 监控组件 Vi ...

  4. 【2020】装了VirtualBox后VMware Workstation无法使用SSH连接Centos的解决方法

    装了个VirtualBox,然后发现无法使用Xshell远程Vmware中的centos了,一开始感觉是虚拟网卡冲突了,发现把VirtualBox的虚拟网卡禁用就可以使用,但是好麻烦啊??每次我特么要 ...

  5. 【scikit-learn基础】--『监督学习』之 岭回归

    岭回归(Ridge Regression)是一种用于处理共线性数据的线性回归改进方法.和上一篇用基于最小二乘法的线性回归相比,它通过放弃最小二乘的无偏性,以损失部分信息.降低精度为代价来获得更实际和可 ...

  6. NetSuite 开发日记:如何管理多环境自定义列表值

    在 NetSuite 中可以创建自定义列表,列表可用于为其他(自定义)记录上的下拉选项列表值. var rec = record.create({ type: 'customrecord_xx' }) ...

  7. Android动态数字输入框

    基础view如下: 具体的思路实现: 1:展示textview实现 2: 顶层使用透明的edittext.获取焦点/删除文字等. public class BaseVerificationCodeVi ...

  8. C语言基础之四舍五入

    要求:输入任意的2个小数:将这2个小数相加并显示结果:将结果按四舍五入方法转换成整数并显示. 0.0到0.4的数加上0.5不会进位,而0.5到0.9的数加上0.5会进位.所以可以依靠这个特点让计算后的 ...

  9. Rabbitmq从安装到简单入门

    1:Rabbitmq是什么? RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件). 它由以高性能.健壮以及可伸缩性出名的 Erlang 写成. 2:它的优点 ...

  10. 在ASP.NET Core微服务架构下使用RabbitMQ如何实现CQRS模式

    前言 在现代软件开发中,微服务架构和CQRS模式都是备受关注的技术趋势.微服务架构通过将应用程序拆分为一系列小型.自治的服务,提供了更好的可伸缩性和灵活性.而CQRS模式则通过将读操作和写操作分离,优 ...