概述

轻量级 .NET表格控件FlexGrid增加了一个强大而方便的功能 - 动态分组。

什么是 FlexGrid 动态分组?

动态分组可以使数据更易于理解、查询和分析。动态分组会自动对数据进行排序,将其拆分为组,并在每个组的上方或下方添加可折叠的组行。 组行可以包括一列或多列的聚合值。

例如,考虑此网格显示DataTable对象的数据:

_flex.DataSource = myDataTable;

这将自动生成列并加载数据,如下所示:

Basic WinForms data grid

Basic WinForms data grid

这是典型的网格视图。您可以通过对数据进行排序和滚动来检查数据,甚至可以添加一些代码来过滤和聚合数据。

使用新的GroupDescriptions属性添加分组:

// bind grid to data source
_flex.DataSource = GetDataTable();

// add groups
_flex.GroupDescriptions = new GroupDescription[] {
    new GroupDescription("ShipCountry"),
    new GroupDescription("CategoryName")
};

// add aggregate to "Sale Amount" column
var col = _flexDataTable.Cols["Sale Amount"];
col.Aggregate = AggregateEnum.Sum;
col.Format = "N2";

// allow grouped cells to spill into empty cells
_flex.AllowMerging = AllowMergingEnum.Nodes;

下图是动态分组结果,这些组是可折叠的,组标题行包含“销售金额”列的汇总信息:

WinForms data grid group header rows

WinForms data grid group header rows

灰色行表示组头,包含展开/折叠选项,显示组信息的可自定义字符串(请参阅GroupHeaderFormat属性),以及聚合属性设置为None以外的任何列的聚合信息。

Ship Country和Category Name列包含大量重复数据,因为网格按这些值分组。您可以将HideGroupedColumns属性设置为true,从而自动从视图中删除这些列。下面的网格就做到了这一点,并为组行添加一些自定义样式:

Custom styling with grouped columns

Custom styling with grouped columns

用户可以使用鼠标单击其标题对列进行排序。对分组列进行排序的同时组值也自动进行排序。对未分组的列进行排序将仅对每个组中的值进行排序。

例如,如果用户单击上面网格上的“产品名称”列标题,则会显示:

Sorting ungrouped columns

Sorting ungrouped columns

这些组没有更改,但产品名称现在按字母顺序排序。

您可以通过在整个网格或单个列上将AllowSorting属性设置为false来阻止鼠标排序。

排序是分组的重要部分。要创建和更新组,网格首先执行多属性排序,包括所有组以及通过用户单击列标题创建的任何其他排序。对数据进行排序后,网格会插入组标题行并根据需要计算小计。

因此,分组需要实现IBindingListView接口的数据源。 这些包括:

  1. DataView类(与数据库中的数据一起使用),
  2. FlexGrid .NET程序集中包含的SortableBindingList类(与自定义对象列表一起使用)
  3. 任何其他实现IBindingListView接口的自定义类。

构成FlexGrid动态分组功能的属性和类:

  1. 通过将其DataSource属性设置为实现IBindingListView接口的类(例如DataView或SortableBindingList)来绑定网格。
  2. 将网格的GroupDescriptions属性设置为GroupDescription对象列表,这些对象描述了数据应如何分组。
  3. (可选)设置网格的GroupHeaderFormat属性以定义组标题行中第一个单元格的内容。
  4. (可选)将网格的AllowMerging属性设置为AllowMergingEnum.Nodes,以便组头内容可以溢出到相邻的空单元格中。
  5. (可选)在列上设置Aggregate属性以在组标题行上显示其聚合值(如总和或平均值)。
  6. (可选)通过设置网格的Tree.Style属性(例如,将其设置为TreeStyleFlags.Leaf以仅显示节点文本,不显示行或折叠/展开字形)来自定义大纲树的外观。

GroupPanel 控件

我们还添加了一个GroupPanel控件,以在FlexGrid启用运行时自动分组。此功能建立在上面讨论的动态分组之上。您可以将列标题拖动到面板中以创建组并将组拖动到新位置。此外,您可以使用上下文菜单进行折叠、展开和清除分组。

GroupPanel控件允许您限制可以创建的最大组数(通过MaxGroups属性),并确定是否应在网格上显示分组列(通过HideGroupedColumns属性)。

Grouping panels in WinForms data grid

Grouping panels in WinForms data grid

如何将组面板添加到FlexGrid表格控件中

  1. 将GroupPanel控件从工具箱拖放到窗体上,将其放在FlexGrid上方,
  2. 将GroupPanel的FlexGrid属性设置为窗体上FlexGrid的实例。
  3. (可选)将Text属性设置为“将此处的列拖到该列的组”。
  4. (可选)设置MaxGroups属性以限制允许的组数。
  5. (可选)将HideGroupedColumns属性设置为show \ hide网格中的分组列。

以上就是新的动态分组的全部内容。希望对您后续的 .NET开发工作有用且易于使用。

除了动态分组功能外,本次更新中 ComponentOne 还改善了 .NET表格控件 FlexGrid 在WPF和JavaScript纯前端平台上的兼容性。