mcpField
S
syncfusion-winforms-grid-grouping-control

syncfusion-winforms-grid-grouping-control

github.com/syncfusion开发282 次安装1 周前更新
代码仓库

关于 syncfusion-winforms-grid-grouping-control

面向开发者的指南,介绍如何在 Windows Forms 应用中实现 Syncfusion GridGroupingControl。内容涵盖数据绑定、分组与层级关系,以及导出和性能优化。

主要功能

  1. 01层级分组与多列分组
  2. 02排序、筛选和汇总
  3. 03主从数据关系
  4. 04编辑、选择与样式设置
  5. 05数据导出和打印
  6. 06大数据集虚拟化指南

适用场景

  1. 01构建分组业务数据视图
  2. 02展示嵌套的父子记录
  3. 03添加筛选、汇总和自定义排序
  4. 04导出或打印网格数据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/syncfusion/winforms-ui-components-skills --skill syncfusion-winforms-grid-grouping-control

安装后在 Claude Code 中输入/syncfusion-winforms-grid-grouping-control确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
advanced-features.md
appearance-and-formatting.md
cell-types.md
clipboard-operations.md
column-management.md
data-binding.md
editing.md
events.md
exporting.md
filtering.md
getting-started.md
grid-layout.md
grouping.md
navigation-and-scrolling.md
performance.md
printing.md
relations-and-hierarchy.md
selections.md
sorting.md
summaries.md
troubleshooting.md

详细介绍

实现 Grid Grouping 控件

全面介绍如何实现 Syncfusion® Windows Forms GridGroupingControl——一款企业级网格组件,内置支持层次分组、筛选、多列排序、汇总和复杂数据关系。

何时使用此技能

在以下情况下使用此技能:

  • 在 Windows Forms 应用程序中实现 GridGroupingControl
  • 显示层次结构或分组数据,按一列或多列自动分组
  • 创建主从关系,使用嵌套表和子关系
  • 应用高级筛选(类似 Excel 的筛选、动态筛选或编程筛选)
  • 添加数据汇总(组汇总、标题汇总、表汇总)
  • 按单列或多列排序数据,并使用自定义排序逻辑
  • 处理大型数据集,并进行虚拟化和性能优化
  • 将分组数据导出到 Excel、PDF、CSV、HTML 或 Word
  • 自定义网格外观,使用条件格式和样式
  • 绑定到各种数据源(DataTable、XML、集合、动态对象)

对于需要高级数据分组、下钻功能和全面数据管理功能的应用程序,此技能必不可少。

组件概览

GridGroupingControl 是一款功能强大的数据网格组件,通过以下功能扩展了标准网格功能:

  • 层次分组: 根据字段值将数据组织为嵌套组
  • 分组拖放区域: 可通过拖放列标题进行分组的交互区域
  • 多级排序: 按多列排序,并支持自定义排序逻辑
  • 高级筛选: 类似 Excel 的筛选、动态筛选和编程记录筛选
  • 汇总: 列汇总、组汇总和标题汇总,支持聚合计算
  • 主从支持: 显示具有父子关系的嵌套表
  • 数据虚拟化: 处理数百万条记录并实现即时滚动
  • 丰富的编辑功能: 支持就地编辑、验证和自定义编辑器
  • 灵活的样式设置: 条件格式、主题和单元格级自定义

此控件专为需要企业级数据管理功能的业务应用程序而设计。

文档和导航指南

入门

📄 阅读: references/getting-started.md

  • 安装和程序集部署
  • 通过设计器和代码创建 GridGroupingControl
  • 基本数据源绑定
  • 填充数据并创建首个网格示例
  • 必要属性和初始配置
数据绑定和数据源

📄 阅读: references/data-binding.md

  • ADO.NET 数据绑定(DataTable、DataSet、DataView)
  • 使用 ReadXml/WriteXml 进行 XML 数据绑定
  • 自定义集合(IList、IBindingList、ITypedList)
  • 强类型集合和泛型集合
  • .NET 4.0+ 的动态对象绑定
  • 使用自定义列的非绑定模式
  • 集合接口和更改通知

阅读时机: 设置数据源、绑定到数据库、使用自定义对象或实现非绑定场景时。

分组功能

📄 阅读: references/grouping.md

  • 添加数据分组(通过设计器或编程方式)
  • GroupDropArea 配置和自定义
  • 多列分组和嵌套组
  • 使用 IComparer 和 IGroupByColumnCategorizer 进行自定义分组
  • GroupBy 选项(标题、页脚、预览行)
  • GroupCaptionSection 和标题文本标记
  • 使用分组(展开/折叠、遍历、访问)
  • 分组事件和自定义

阅读时机: 实现分组功能、自定义分组外观、使用嵌套组或处理分组相关事件时。

排序操作

📄 **阅读:references/sorting.md

  • 使用 SortedColumns 集合以编程方式排序
  • 按优先级进行多列排序
  • 排序图标的位置和自定义
  • 移除和清除排序
  • 对分组列进行排序
  • 按汇总值排序
  • 按显示成员排序(外键关系)
  • 使用 IComparer 自定义排序
  • 排序事件(Changing/Changed)

**何时阅读:**实现排序功能、自定义排序行为、按计算值排序或处理排序事件时。

筛选和搜索

📄 **阅读:references/filtering.md

  • 设置筛选栏以供用户筛选
  • 记录筛选(以编程方式筛选)
  • 使用运算符按表达式筛选
  • 使用 GridDynamicFilter 进行动态筛选
  • 类 Excel 筛选(Optimized 和 Office2007)
  • 按颜色、数字、日期和值为 null 的项目筛选
  • 按显示成员而非值成员筛选
  • 堆叠标题筛选
  • 获取已筛选的记录和筛选字符串
  • 筛选事件

**何时阅读:**实现筛选功能、类 Excel 筛选 UI、以编程方式筛选数据或自定义筛选时。

汇总和聚合

📄 **阅读:references/summaries.md

  • 汇总类型(Column、Group、Table、Caption)
  • 使用 SummaryDescriptor 添加汇总
  • 内置聚合函数(Sum、Average、Count、Min、Max)
  • 使用 ISummaryAggregate 创建自定义汇总
  • 按汇总值排序
  • 汇总外观和格式设置
  • 在组标题中显示汇总
  • 汇总事件

**何时阅读:**添加聚合计算、显示组总计、实现自定义聚合或在标题中显示汇总时。

关系和层次结构

📄 **阅读:references/relations-and-hierarchy.md

  • 设置主从关系
  • 配置嵌套表
  • 关系描述符和子表描述符
  • 层次结构的显示和导航
  • 展开/折叠嵌套表
  • 以编程方式处理子表
  • 外键引用关系

**何时阅读:**实现主从网格、显示嵌套数据、配置父子关系或处理层次数据时。

编辑功能

📄 **阅读:references/editing.md

  • 启用/禁用编辑
  • 单元格编辑模式和激活
  • 当前单元格行为
  • 数据验证
  • 编辑事件(StartEditing、EditingComplete)
  • 自定义编辑器和单元格类型
  • AddNew 记录功能

**何时阅读:**配置编辑行为、实现验证、自定义编辑器或处理编辑事件时。

选择功能

📄 **阅读:references/selections.md

  • 选择模式(None、One、Multiple、MultiSimple、MultiExtended)
  • 记录选择与单元格选择
  • 以编程方式选择
  • 获取已选记录
  • 选择事件
  • 选择外观

**何时阅读:**实现选择功能、以编程方式选择记录或自定义选择行为时。

列管理

📄 **阅读:references/column-management.md

  • 以编程方式添加/移除列
  • 列属性(Width、HeaderText、MappingName)
  • 列宽和自动调整大小
  • 列可见性和 VisibleColumns 集合
  • 列重新排序和拖放
  • 冻结列
  • 非绑定列

**何时阅读:**管理列可见性、配置列属性、实现冻结列或添加非绑定列时。

外观和样式

📄 阅读: references/appearance-and-formatting.md

  • 单元格样式和 GridStyleInfo
  • 条件格式
  • 主题和视觉样式
  • 行和列的外观
  • 用于动态设置样式的 QueryCellStyleInfo 事件
  • 不同单元格类型的外观属性
  • BackColor、ForeColor、Font 自定义

阅读时机: 自定义网格外观、应用条件格式、实现主题或为特定单元格设置样式时。

单元格类型和自定义

📄 阅读: references/cell-types.md

  • 内置单元格类型(TextBox、ComboBox、CheckBox、Image)
  • 带有 DataSource 的 ComboBox 单元格
  • 用于布尔数据的 CheckBox 单元格
  • 用于显示图形的 Image 单元格
  • 自定义单元格类型和渲染器
  • 单元格类型配置

阅读时机: 实现下拉列表、复选框、图像单元格或创建自定义单元格渲染器时。

网格布局

📄 阅读: references/grid-layout.md

  • 行和列的大小设置(自动调整大小、适应)
  • 用于分组列标题的堆叠标题
  • 覆盖范围(合并单元格)
  • 网格边框和线条
  • 布局自定义和间距

阅读时机: 配置行高、实现堆叠标题、合并单元格或自定义网格布局时。

导航和滚动

📄 阅读: references/navigation-and-scrolling.md

  • 导航栏配置
  • 滚动选项和行为
  • 键盘导航
  • 当前单元格导航
  • ScrollControlIntoView 方法

阅读时机: 配置导航行为、自定义键盘快捷键或实现编程式导航时。

剪贴板操作

📄 阅读: references/clipboard-operations.md

  • 复制/粘贴操作
  • 剪贴板格式(Text、CSV、HTML)
  • 剪切操作
  • 剪贴板自定义
  • CopyPaste 事件

阅读时机: 实现复制/粘贴功能、自定义剪贴板格式或处理剪贴板事件时。

导出数据

📄 阅读: references/exporting.md

  • 使用 ExcelExportingOptions 导出 Excel
  • 使用 PdfExportingOptions 导出 PDF
  • 导出 CSV
  • 导出 HTML
  • 导出 Word
  • 导出选项和自定义

阅读时机: 实现数据导出功能、自定义导出格式或配置导出选项时。

打印

📄 阅读: references/printing.md

  • 打印配置和设置
  • 打印预览
  • 打印设置(页边距、方向、缩放)
  • 自定义打印布局
  • PrintDocument 集成

阅读时机: 实现打印功能、自定义打印布局或配置打印设置时。

性能优化

📄 阅读: references/performance.md

  • 对大型数据集进行虚拟化
  • 处理数百万条记录
  • 性能优化提示
  • 数据绑定最佳实践
  • 内存管理

阅读时机: 优化网格性能、处理大型数据集或排查性能问题时。

事件参考

📄 阅读: references/events.md

  • 数据相关事件(QueryValue、SaveValue)
  • UI 交互事件(CellClick、CellDoubleClick)
  • 分组事件(GroupExpanding、GroupExpanded)
  • 排序事件(SortedColumns.Changing/Changed)
  • 筛选事件(RecordFilters.Changing/Changed)
  • 编辑事件(CurrentCellStartEditing、EditingComplete)
  • 完整的事件参考和示例

阅读时机: 处理网格事件、实现事件驱动逻辑或响应用户交互时。

高级功能

📄 阅读: references/advanced-features.md

  • 用于计算列的表达式字段
  • 数据验证规则
  • 查找和替换功能
  • 序列化(Binary、SOAP、XML)
  • 平板电脑触控支持
  • 缩放功能

何时阅读: 实现计算列、验证规则、查找/替换、序列化或触控支持时。

故障排除

📄 阅读: references/troubleshooting.md

  • 常见问题和解决方案
  • 性能故障排除
  • 数据绑定问题
  • UI 渲染问题
  • 最佳实践和指南

何时阅读: 调试问题、解决错误或优化实现时。

快速入门示例

以下是一个使用 GridGroupingControl 的最小示例,助你快速上手:

using Syncfusion.Windows.Forms.Grid.Grouping;
using System.Data;

// Create the control
GridGroupingControl gridGroupingControl1 = new GridGroupingControl();
gridGroupingControl1.Dock = DockStyle.Fill;
this.Controls.Add(gridGroupingControl1);

// Create sample data
DataTable dataTable = new DataTable("Employees");
dataTable.Columns.Add("ID", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Department", typeof(string));
dataTable.Columns.Add("Salary", typeof(decimal));

dataTable.Rows.Add(1, "John Smith", "Sales", 50000);
dataTable.Rows.Add(2, "Sarah Jones", "Marketing", 55000);
dataTable.Rows.Add(3, "Mike Wilson", "Sales", 52000);
dataTable.Rows.Add(4, "Lisa Brown", "Marketing", 58000);
dataTable.Rows.Add(5, "Tom Davis", "IT", 65000);

// Bind data source
gridGroupingControl1.DataSource = dataTable;

// Enable grouping with GroupDropArea
gridGroupingControl1.ShowGroupDropArea = true;

// Add a group by Department
gridGroupingControl1.TableDescriptor.GroupedColumns.Add("Department");

// Add a summary to show total salary per group
GridSummaryColumnDescriptor summaryColumn = new GridSummaryColumnDescriptor();
summaryColumn.DataMember = "Salary";
summaryColumn.SummaryType = SummaryType.DoubleAggregate;
summaryColumn.Format = "{Sum:C}";
summaryColumn.Name = "TotalSalary";

GridSummaryRowDescriptor summaryRow = new GridSummaryRowDescriptor();
summaryRow.SummaryColumns.Add(summaryColumn);
gridGroupingControl1.TableDescriptor.SummaryRows.Add(summaryRow);

// Enable sorting
gridGroupingControl1.TableOptions.AllowSortColumns = true;

此示例创建了一个按部门分组并汇总薪资的分组网格。

常见模式

带嵌套表格的主从模式
// Assuming Orders and OrderDetails are related tables in a DataSet
DataSet dataSet = GetOrdersDataSet(); // Your data source

// Bind to parent table
gridGroupingControl1.DataSource = dataSet;
gridGroupingControl1.DataMember = "Orders";

// Nested tables are automatically detected from DataSet relations
// Customize child table appearance
GridRelationDescriptor relation = gridGroupingControl1.TableDescriptor.Relations[0];
relation.ChildTableDescriptor.Appearance.AlternateRecordFieldCell.BackColor = Color.LightBlue;
动态筛选模式
using Syncfusion.GridHelperClasses;

// Wire dynamic filter
GridDynamicFilter dynamicFilter = new GridDynamicFilter();
dynamicFilter.WireGrid(gridGroupingControl1);

// Enable filter bar
gridGroupingControl1.TopLevelGroupOptions.ShowFilterBar = true;

// Enable filtering for specific columns
foreach (GridColumnDescriptor column in gridGroupingControl1.TableDescriptor.Columns)
{
    column.AllowFilter = true;
}
类似 Excel 的筛选模式
using Syncfusion.GridHelperClasses;

// Create and wire Excel filter
GridExcelFilter excelFilter = new GridExcelFilter();
excelFilter.AllowSearch = true; // Enable search in filter dropdown
excelFilter.AllowResize = true; // Allow resizing filter popup
excelFilter.EnableNumberFilter = true; // Enable number filters
excelFilter.EnableDateFilter = true; // Enable date filters
excelFilter.AllowFilterByColor = true; // Enable filter by cell color

excelFilter.WireGrid(gridGroupingControl1);
编程式分组模式
// Multi-level grouping
gridGroupingControl1.TableDescriptor.GroupedColumns.Add("Country");
gridGroupingControl1.TableDescriptor.GroupedColumns.Add("City");

// Customize group options
gridGroupingControl1.TopLevelGroupOptions.ShowCaption = true;
gridGroupingControl1.TopLevelGroupOptions.ShowGroupHeader = true;
gridGroupingControl1.TopLevelGroupOptions.ShowGroupFooter = true;

// Customize caption text with tokens
gridGroupingControl1.ChildGroupOptions.CaptionText = 
    "{CategoryName}: {Category} ({RecordCount} items)";
条件格式模式
// Apply conditional formatting based on cell value
gridGroupingControl1.QueryCellStyleInfo += (sender, e) =>
{
    if (e.TableCellIdentity.TableCellType == GridTableCellType.RecordFieldCell)
    {
        if (e.TableCellIdentity.Column.Name == "Salary")
        {
            decimal salary = Convert.ToDecimal(e.Style.CellValue);
            if (salary > 60000)
            {
                e.Style.BackColor = Color.LightGreen;
                e.Style.Font.Bold = true;
            }
            else if (salary < 40000)
            {
                e.Style.BackColor = Color.LightCoral;
            }
        }
    }
};
汇总模式

// Count summary
GridSummaryColumnDescriptor countColumn = new GridSummaryColumnDescriptor(
    "Count", SummaryType.Count, "ID", "{Count}");
summaryRow.SummaryColumns.Add(countColumn);

// Average summary
GridSummaryColumnDescriptor avgColumn = new GridSummaryColumnDescriptor(
    "Average", SummaryType.DoubleAggregate, "Salary", "Avg: {Average:C}");
summaryRow.SummaryColumns.Add(avgColumn);

// Total summary
GridSummaryColumnDescriptor sumColumn = new GridSummaryColumnDescriptor(
    "Total", SummaryType.DoubleAggregate, "Salary", "Total: {Sum:C}");
summaryRow.SummaryColumns.Add(sumColumn);

gridGroupingControl1.TableDescriptor.SummaryRows.Add(summaryRow);

关键属性

核心属性
属性类型描述
DataSourceobject获取或设置网格的数据源
DataMemberstring获取或设置数据源中的数据成员
ShowGroupDropAreabool显示或隐藏用于拖放分组的分组放置区域
TableDescriptorGridTableDescriptor提供对表格配置和列的访问
TableOptionsGridTableOptionsStyleInfo配置表格级选项
TopLevelGroupOptionsGridGroupOptionsStyleInfo配置顶级分组的选项
ChildGroupOptionsGridGroupOptionsStyleInfo配置子分组的选项
集合属性
属性类型描述
TableDescriptor.GroupedColumnsSortColumnDescriptorCollection用于数据分组的列
TableDescriptor.SortedColumnsSortColumnDescriptorCollection用于数据排序的列
TableDescriptor.RecordFiltersRecordFilterDescriptorCollection编程式记录筛选器
TableDescriptor.SummaryRowsGridSummaryRowDescriptorCollection汇总行定义
TableDescriptor.ColumnsGridColumnDescriptorCollection列描述符
TableDescriptor.RelationsGridRelationDescriptorCollection子表关系

关键事件

数据事件
  • QueryValue - 网格需要检索未绑定单元格值时触发
  • SaveValue - 网格需要保存未绑定单元格值时触发
  • SourceListListChanged - 绑定的数据源发生变化时触发
UI 事件
  • QueryCellStyleInfo - 动态自定义单元格外观时触发
  • TableControlCellClick - 单击单元格时触发
  • TableControlCellDoubleClick - 双击单元格时触发
  • TableControlCurrentCellActivated - 单元格成为当前单元格时触发
分组事件
  • GroupExpanding / GroupExpanded - 分组展开时触发
  • GroupCollapsing / GroupCollapsed - 分组折叠时触发
  • GroupedColumns.Changing / Changed - 分组发生变化时触发
排序事件
  • SortedColumns.Changing / Changed - 排序发生变化时触发
  • TableControlQueryAllowSortColumn - 控制列排序时触发
筛选事件
  • RecordFilters.Changing / Changed - 筛选器发生变化时触发
  • GridExcelFilter.RecordFiltersItemChanging / Changed - Excel 筛选事件
编辑事件
  • TableControlCurrentCellStartEditing - 开始编辑单元格时触发
  • TableControlCurrentCellEditingComplete - 完成单元格编辑时触发
  • TableControlCurrentCellValidating - 验证单元格值时触发

常见用例

商业智能仪表板

通过多级分组、下钻功能和汇总摘要,展示复杂数据,用于商业分析和报告。

数据管理应用程序

构建具备主从表单、内联编辑、验证和高级筛选功能的 CRUD 应用程序,用于数据管理。

层次数据可视化

展示组织架构、产品类别或任何层次数据,并支持嵌套分组和可展开分区。

报告应用程序

生成丰富的报告,支持分组、汇总、条件格式设置,并可导出为多种格式(Excel、PDF、Word)。

数据分析工具

实现交互式数据探索,支持动态分组、排序、筛选和汇总计算。

架构说明

引擎架构

GridGroupingControl 使用独特的基于引擎的架构,将数据管理(Engine)与显示(TableControl)分离。这样可以实现:

  • 对同一数据提供多个视图
  • 高效的数据虚拟化
  • 灵活的分组和排序
  • 独立处理嵌套表
显示元素

网格将内容组织为以下显示元素:

  • Records - 单条数据行
  • Groups - 具有相同类别值的记录集合
  • CaptionRows - 组标题行
  • SummaryRows - 汇总摘要行
  • FilterBarCell - 筛选输入单元格
表层次结构
  • GridTable - 顶级表实例
  • GridNestedTable - 主从关系中的子表
  • TopLevelGroup - 包含所有记录的根组
  • Groups - 嵌套组集合

最佳实践

  1. 数据绑定: 使用实现 IBindingList 的强类型集合,以自动通知更改
  2. 性能: 为大型数据集启用虚拟化(自动处理)
  3. 分组: 将初始分组级别限制为 2-3 级,以提升用户体验
  4. 筛选: 使用 GridExcelFilter,提供便于用户使用的筛选体验
  5. 汇总: 根据使用场景,将汇总策略性地放置在标题或页脚中
  6. 样式设置: 使用 QueryCellStyleInfo 实现动态样式设置,而不是为所有单元格设置样式
  7. 事件: 尽量减少 QueryCellStyleInfo 等高频触发事件中的工作
  8. 内存: 在窗体关闭时妥善释放 GridGroupingControl

相关组件

  • GridControl - 用于较简单场景的标准非分组网格
  • GridDataBoundGrid - 轻量级数据绑定网格
  • DataGrid - 标准 .NET DataGrid 控件

需要分组、汇总和层次结构功能时,请使用 GridGroupingControl。对于基本数据展示,请使用更简单的网格。

文档链接


后续步骤: 如需详细的实现指南,请根据需求转到上面的特定参考文件。请从 getting-started.md 开始进行初始设置。

评论

支持 Markdown