DevExpress WinForms中文教程:Grouping(分组)- 基础知识

翻译|使用教程|编辑:龚雪|2025-08-05 10:19:16.660|阅读 12 次

概述:本教程主要为大家介绍DevExpress WinForms数据网格控件中的分组行API,欢迎下载最新版组件体验!

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

相关链接:

DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

本教程从DevExpress WinForms 网格中默认可用的数据分组UI开始,然后向您展示如何在设计时应用数据分组,并继续介绍相关选项,例如:

  • 使用预定义的值范围对数据进行分组;
  • 当滚动大数据组时,将组行锚定到视图的顶部;
  • 更改组行绘制样式;
  • 自动扩展组行;
  • 禁用最终用户数据分组。

最后,本教程将指导您了解可用于在代码中分组数据的基本API。

获取DevExpress WinForms v25.1正式版下载

DevExpress技术交流群11:749942875      欢迎一起进群讨论

默认操作

要按特定列对数据进行分组,最终用户可以将列标题面板中的标题拖到组面板上。DevExpress WinForms GridControl自动按升序对数据组进行排序,若要反转排序顺序,请单击列标题。

DevExpress WinForms中文使用教程图集

要展开分组行并因此访问它的子数据行,双击组行的任何位置或单击行展开按钮。

DevExpress WinForms中文使用教程图集

对数据进行分组的另一种方法是从列标题上下文菜单中选择Group by This Column项,如果分组面板中有两个或更多列,则行将根据分组列值形成层次结构。

DevExpress WinForms中文使用教程图集

您可以将列标题拖动到分组面板中的另一个位置。

DevExpress WinForms中文使用教程图集

拖动列标题时,按住Ctrl键将一个标题停靠到另一个标题上,这允许您一次按多个列对网格数据进行分组。

DevExpress WinForms中文使用教程图集

合并的列分组块可以与常规列分组组合。

DevExpress WinForms中文使用教程图集

若要取消数据组,请将列标题从分组面板拖到列标题面板,或右键单击列标题并从上下文菜单中选择Ungroup。要删除所有分组,请右键单击组面板并选择Clear Grouping

DevExpress WinForms中文使用教程图集
在设计时分组

在设计时,您可以使用相同的拖放操作和上下文菜单。除此之外,您还可以使用列的GridColumn.GroupIndex属性。将此属性设置为非负整数值,该值指定分组级别。将Received列的值设置为0,将Read列的值设置为1。因此,Received列将处于根分组级别,Read列将处于第二级。

DevExpress WinForms中文使用教程图集

运行应用程序并尝试展开和折叠行,来查看数据行分组背后的逻辑。

预定义值范围

默认情况下,数据组包含相同的值,但网格还允许将值范围分组在一起。这可以很容易地用日期/时间列来演示。打开显示Received列设置的Property网格,并将GridColumn.GroupInterval属性设置为ColumnGroupInterval.DateRange。结果,网格行被组合成日期范围,包括Today”, “Yesterday”, “Last Week”等。

DevExpress WinForms中文使用教程图集
相关选项

接下来,查看与数据分组有关的影响网格操作的选项。

默认情况下,分组列值尽在分组行中显示,列不在视图中显示。如果您需要显示它们,展开视图的GridView.OptionsView属性并启用GridOptionsView.ShowGroupedColumns选项,将看到分组列现在保留在视图中。

DevExpress WinForms中文使用教程图集

视图的GridOptionsView.GroupDrawMode属性指定了分组行的绘制样式,更改这个属性值,绘制样式通常会影响分组行的高度和数据组的缩进。

DevExpress WinForms中文使用教程图集

现在展开View的GridView.OptionsBehavior属性并启用GridOptionsBehavior.AllowFixedGroups选项,在滚动分组数据时,最上面的组行固定在网格的顶部,并且始终显示。一个特殊的符号表示您已经滚动过了该分组中的一部分行。

DevExpress WinForms中文使用教程图集

分组操作后,数据组通常会被折叠。要自动展开所有组行,请将GridOptionsBehavior.AutoExpandAllGroups属性设置为true。如果更改分组,请查看如何显示所有数据行。

DevExpress WinForms中文使用教程图集
限制终端用户功能

GridControl允许您阻止最终用户更改已应用于网格的分组条件,将列的OptionsColumn.AllowGroup属性设置为false,来防止最终用户根据该列进行分组。要对视图中的所有列执行相同的操作,请禁用视图的GridOptionsCustomization.AllowGroup属性,另外您可以使用View的GridOptionsView.ShowGroupPanel属性隐藏分组面板。

DevExpress WinForms中文使用教程图集
在代码中分组

下一步是了解如何在代码中对网格数据进行分组。请注意,无论视图的GridOptionsCustomization.AllowGroup和列的OptionsColumn.AllowGroup选项如何,这都可以工作。

根据按钮的Click事件处理程序中的接收列和读取列对数据进行分组,首先获取对应的两个网格列对象。通过调用View的GridView.ClearGrouping方法来清除现有的组设置,然后使用GridColumn.GroupIndex属性设置所需的分组级别。注意,GridControl将在每个语句之后重新排序它的数据——在我们的示例中是三次。为了防止过度更新,请使用ColumnView.BeginSortColumnView.EndSort方法。在这种情况下,网格视图将只更新一次。

C#

private void btn_Group_ItemClick(object sender, ItemClickEventArgs e) {
GridColumn colReceived = gridView.Columns["Date"];
GridColumn colRead = gridView.Columns["Read"];
gridView.BeginSort();
try {
gridView.ClearGrouping();
colReceived.GroupIndex = 0;
colRead.GroupIndex = 1;
}
finally {
gridView.EndSort();
}
}

运行应用程序并单击Group按钮,因此网格数据按Received和Read列分组。

对网格列应用分组的另一种方法是使用视图的ColumnView.SortInfo集合,调用GridColumnSortInfoCollection.ClearAndAddRange方法来清除现有的排序/分组设置,然后根据需要对数据进行排序和分组。传递一个包含两个GridColumnSortInfo元素的数组作为方法的第一个参数,这些元素按升序对Received列和Read列应用排序。传递2作为第二个参数,从而表明需要应用数据分组,而不是排序。这个方法只更新View一次,所以您不需要使用ColumnView.BeginSortColumnView.EndSort方法。

C#

private void btn_Group_ItemClick(object sender, ItemClickEventArgs e) {
GridColumn colReceived = gridView.Columns["Date"];
GridColumn colRead = gridView.Columns["Read"];
gridView.SortInfo.ClearAndAddRange(new GridColumnSortInfo[] {
new GridColumnSortInfo(colReceived, DevExpress.Data.ColumnSortOrder.Ascending),
new GridColumnSortInfo(colRead, DevExpress.Data.ColumnSortOrder.Ascending),
}, 2);
}

现在再次运行应用程序并单击Group按钮来查看结果。

要在Expand All Groups按钮得单击事件处理程序中展开所有分组行,请使用View的GridView.ExpandAllGroups方法。类似地,用GridView.CollapseAllGroups 方法调用为Collapse All Groups按钮编写的Click事件处理程序。

C#

private void btn_Expand_ItemClick(object sender, ItemClickEventArgs e) {
gridView.ExpandAllGroups();
}

private void btn_Collapse_ItemClick(object sender, ItemClickEventArgs e) {
gridView.CollapseAllGroups();
}

通过单击Group按钮运行应用程序并对数据进行分组,单击Expand All Groups按钮时,将显示所有数据行。若要折叠组行,请单击Collapse All Groups按钮。


更多DevExpress线上公开课、中文教程资讯请上中文网获取

关于慧都科技

慧都是⼀家⾏业数字化解决⽅案公司,专注于软件、⽯油与⼯业领域,以深⼊的业务理解和⾏业经验,帮助企业实现智能化转型与持续竞争优势。

慧都科技是DevExpress的中国区的合作伙伴,DevExpress作为用户界面领域的优秀产品,帮助企业高效构建权限管理、数据可视化(如网格/图表/仪表盘)、跨平台系统(WinForms/ASP.NET/.NET MAUI)及行业定制解决方案,加速开发并强化交互体验。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:慧都网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP