关于 syncfusion-winforms-pivot-chart
面向 Windows Forms 开发者的 Syncfusion Pivot Chart 实现技能,用于将多维透视数据可视化为交互式图表。内容涵盖层级钻取、字段分组、数据绑定和 Excel 导出,适用于业务分析场景。
主要功能
- 01支持多种图表类型
- 02支持层级钻取与回退
- 03绑定 IEnumerable 或 DataTable
- 04提供字段列表和拖放分组栏
- 05数据变更时自动更新图表
- 06支持导出到 Excel
适用场景
- 01按产品、地区和时间分析销售数据
- 02查看部门及期间的财务数据
- 03比较营销渠道和时间段的活动表现
- 04通过层级钻取探索业务指标
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ syncfusion/ winforms-ui-components-skills --skill syncfusion-winforms-pivot-chart安装后在 Claude Code 中输入/syncfusion-winforms-pivot-chart确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/appearance-customization.mdchart-types.mddata-binding.mddrill-operations.mdexport.mdgetting-started.mdgrouping-bar.mdlegend.mdpivot-axis.mdpivot-table-field-list.mdsorting.mdtouch-support.mdtroubleshooting.mdzooming-scrolling.md详细介绍
实现 Syncfusion Pivot Chart
在 Windows Forms 应用程序中实现 Syncfusion Pivot Chart 控件的全面指南。Pivot Chart 可交互式地可视化多维透视数据,并支持下钻功能,提供 11 种以上图表类型,以及分组栏、字段列表和 Excel 导出等高级功能。
何时使用此技能
在以下情况下使用此技能:
- 以图形形式可视化透视数据,并使用多种图表类型
- 实现下钻/上钻功能,以浏览层次数据的不同级别
- 创建商业智能仪表板,并加入交互式透视可视化
- 分析来自 IEnumerable 列表或 DataTable 的多维数据
- 为分析型应用程序构建 OLAP 可视化界面
- 通过分组栏和透视字段列表添加交互式数据探索功能
- 将透视图表导出为 Excel 格式以用于报告
- 以图表形式显示层次化的销售、财务或分析数据
- 在 Windows Forms 应用程序中实现类似 Excel 的透视图表功能
- 创建动态图表,根据透视字段选择进行更新
组件概览
Syncfusion Pivot Chart 是一款轻量、高性能的控件,可读取透视信息并以图形形式进行可视化。它提供:
- 11 种以上图表类型: 折线图、样条图、柱形图、面积图、样条面积图、堆积面积图、堆积柱形图、百分比堆积面积图、百分比堆积柱形图、阶梯折线图、阶梯面积图
- 下钻支持: 通过下钻/上钻浏览数据层次的内部级别
- 数据绑定: 支持 IEnumerable 列表和 DataTable 数据源
- 透视表字段列表: 内置透视架构设计器,类似 Microsoft Excel
- 分组栏: 通过拖放交互式地对数据字段进行分组
- 图例: 以颜色标识数据系列
- 导出: 导出为 Excel 格式
- 缩放和平移: 交互式探索数据
- 触控支持: 适用于平板电脑和支持触控的设备
- 实时更新: 数据更改时自动更新图表
文档和导航指南
入门
📄 阅读: references/getting-started.md
- 程序集部署和依赖项
- 通过设计器、代码或 Syncfusion Reference Manager 添加控件
- 许可证要求(v16.2.0.x+)
- 基本初始化和首次数据绑定
- ItemSource、PivotAxis、PivotLegend 和 PivotCalculations 的设置
数据绑定
📄 阅读: references/data-binding.md
- 绑定 IEnumerable 列表和 DataTable 数据源
- 配置 ItemSource 属性
- 为层次数据设置 PivotAxis
- 配置 PivotLegend 以对数据系列分类
- 设置 PivotCalculations 以聚合数据
- 使用 EnableUpdating 实时更新
- 使用 BeginUpdate/EndUpdate 优化性能
图表类型
📄 阅读: references/chart-types.md
- 11 种受支持图表类型概览
- 折线图、样条图和阶梯折线图
- 柱形图和堆积柱形图
- 面积图、样条面积图和阶梯面积图
- 堆积面积图和堆积柱形图(100%)
- 动态切换图表类型
- ChartTypes 枚举
- 为数据选择合适的图表类型
下钻操作
📄 阅读: references/drill-operations.md
- 启用下钻/上钻功能
- 配置 AllowDrillDown 属性
- 浏览层次数据的不同级别
- 使用展开器执行下钻操作
- 以编程方式执行下钻操作
- 用户交互和下钻事件
分组栏
📄 阅读: references/grouping-bar.md
- 启用和配置分组栏
- 通过拖放交互式地对字段进行分组
- 操作和重新排列字段
- 可见性和自定义选项
- 用户与分组栏的交互
枢轴轴配置
📄 阅读: references/pivot-axis.md
- 了解 PivotAxis 属性
- 向轴添加 PivotItem 对象
- 用于绑定数据字段的 FieldMappingName
- 用于显示汇总数据的 TotalHeader
- 使用多个轴项目构建分层结构
- 轴自定义选项
枢轴表字段列表
📄 阅读: references/pivot-table-field-list.md
- 内置枢轴架构设计器
- 类似 Microsoft Excel 的字段列表界面
- 启用并显示字段列表
- 拖放配置字段
- 设置和管理筛选器
- 配置计算字段
- 用户与字段列表的交互
图例
📄 阅读: references/legend.md
- 配置 PivotLegend 属性
- 使用颜色区分系列
- 图例位置和布局
- 可见性和自定义选项
- 系列标签和格式设置
排序
📄 阅读: references/sorting.md
- 对图表中的枢轴数据进行排序
- 升序和降序排序
- 对多个字段进行排序和自定义排序逻辑
- 排序配置选项
导出
📄 阅读: references/export.md
- 将枢轴图表导出到 Excel
- 导出配置和选项
- 文件格式设置
- 以编程方式执行导出操作
- 自定义导出内容
缩放和平移
📄 阅读: references/zooming-scrolling.md
- 交互式缩放功能
- 支持滚动浏览大型数据集,以及使用鼠标滚轮缩放
- 缩放配置和自定义
- 滚动条的外观和行为
触控支持
📄 阅读: references/touch-support.md
- 支持平板电脑触控手势
- 触控交互(轻触、滑动、捏合)
- 针对支持触控的设备进行优化
- 触控手势配置
- 移动设备和平板电脑注意事项
外观和自定义
📄 阅读: references/appearance-customization.md
- 自定义图表区域
- 系列样式和颜色,以及调色板配置
- 打印支持和设置
- 自定义样式选项
故障排除
📄 阅读: references/troubleshooting.md
- 常见问题和解决方案
- 数据绑定错误及修复方法
- 性能优化技巧
- 如何启用下钻以及打印枢轴图表
- 如何设置自定义调色板,以及调试和诊断技巧
快速入门示例
最简枢轴图表实现
using System;
using System.Windows.Forms;
using Syncfusion.Windows.Forms.PivotChart;
using Syncfusion.PivotAnalysis.Base;
namespace PivotChartDemo
{
public partial class Form1 : Form
{
private PivotChart pivotChart1;
public Form1()
{
InitializeComponent();
// Initialize Pivot Chart
pivotChart1 = new PivotChart();
pivotChart1.Dock = DockStyle.Fill;
// Bind data source
pivotChart1.ItemSource = ProductSales.GetSalesData();
// Configure Pivot Axis (hierarchical structure)
pivotChart1.PivotAxis.Add(new PivotItem
{
FieldMappingName = "Product",
TotalHeader = "Total"
});
pivotChart1.PivotAxis.Add(new PivotItem
{
FieldMappingName = "Country",
TotalHeader = "Total"
});
pivotChart1.PivotAxis.Add(new PivotItem
{
FieldMappingName = "State",
TotalHeader = "Total"
});
// Configure Pivot Legend (series categorization)
pivotChart1.PivotLegend.Add(new PivotItem
{
FieldMappingName = "Date",
TotalHeader = "Total"
});
// Configure Calculations (data aggregation)
pivotChart1.PivotCalculations.Add(new PivotComputationInfo
{
FieldName = "Quantity",
Format = "#,##0"
});
// Set chart type
pivotChart1.ChartTypes = PivotChartTypes.Column;
// Enable drill-down
pivotChart1.AllowDrillDown = true;
// Add to form
this.Controls.Add(pivotChart1);
}
}
}
常见模式
模式 1:绑定到 IEnumerable 集合
using System.Collections.Generic;
// Data model
public class SalesData
{
public string Product { get; set; }
public string Region { get; set; }
public string Quarter { get; set; }
public int Quantity { get; set; }
public decimal Amount { get; set; }
}
// Create and bind data
private void BindPivotChart()
{
List<SalesData> salesList = new List<SalesData>
{
new SalesData { Product = "Laptop", Region = "North", Quarter = "Q1", Quantity = 50, Amount = 50000 },
new SalesData { Product = "Laptop", Region = "South", Quarter = "Q1", Quantity = 40, Amount = 40000 },
new SalesData { Product = "Mouse", Region = "North", Quarter = "Q1", Quantity = 200, Amount = 6000 },
// Add more data...
};
pivotChart1.ItemSource = salesList;
// Configure fields
pivotChart1.PivotAxis.Add(new PivotItem { FieldMappingName = "Product", TotalHeader = "Total" });
pivotChart1.PivotLegend.Add(new PivotItem { FieldMappingName = "Quarter", TotalHeader = "Total" });
pivotChart1.PivotCalculations.Add(new PivotComputationInfo
{
FieldName = "Amount",
Format = "C",
SummaryType = SummaryType.DoubleTotalSum
});
}
模式 2:动态切换图表类型
// Add buttons or menu items to switch chart types
private void btnLineChart_Click(object sender, EventArgs e)
{
pivotChart1.ChartTypes = PivotChartTypes.Line;
}
private void btnColumnChart_Click(object sender, EventArgs e)
{
pivotChart1.ChartTypes = PivotChartTypes.Column;
}
private void btnAreaChart_Click(object sender, EventArgs e)
{
pivotChart1.ChartTypes = PivotChartTypes.Area;
}
private void btnStackingColumn_Click(object sender, EventArgs e)
{
pivotChart1.ChartTypes = PivotChartTypes.StackingColumn;
}
模式 3:分层下钻配置
// Enable drill-down with multiple hierarchy levels
private void ConfigureDrillDown()
{
pivotChart1.AllowDrillDown = true;
// Define hierarchy: Category → Product → Region → State
pivotChart1.PivotAxis.Clear();
pivotChart1.PivotAxis.Add(new PivotItem
{
FieldMappingName = "Category",
TotalHeader = "All Categories"
});
pivotChart1.PivotAxis.Add(new PivotItem
{
FieldMappingName = "Product",
TotalHeader = "All Products"
});
pivotChart1.PivotAxis.Add(new PivotItem
{
FieldMappingName = "Region",
TotalHeader = "All Regions"
});
pivotChart1.PivotAxis.Add(new PivotItem
{
FieldMappingName = "State",
TotalHeader = "All States"
});
}
模式 4:实时数据更新
// Enable automatic updates when data changes
private void ConfigureRealTimeUpdates()
{
// Enable automatic chart updates
pivotChart1.EnableUpdating = true;
// Bind to observable collection or implement INotifyPropertyChanged
var salesData = new BindingList<SalesData>(GetSalesData());
pivotChart1.ItemSource = salesData;
// Now any changes to salesData will automatically update the chart
}
// For bulk updates, use BeginUpdate/EndUpdate
private void BulkDataUpdate()
{
pivotChart1.BeginUpdate();
try
{
// Perform multiple data operations
var data = (BindingList<SalesData>)pivotChart1.ItemSource;
for (int i = 0; i < 100; i++)
{
data.Add(new SalesData { /* ... */ });
}
}
finally
{
pivotChart1.EndUpdate(); // Chart updates once after all changes
}
}
模式 5:带格式设置的多项计算
// Display multiple aggregated values with custom formatting
private void ConfigureMultipleCalculations()
{
pivotChart1.PivotCalculations.Clear();
// Total quantity
pivotChart1.PivotCalculations.Add(new PivotComputationInfo
{
FieldName = "Quantity",
Format = "#,##0",
SummaryType = SummaryType.DoubleTotalSum,
FieldHeader = "Total Qty"
});
// Total amount (currency)
pivotChart1.PivotCalculations.Add(new PivotComputationInfo
{
FieldName = "Amount",
Format = "C2",
SummaryType = SummaryType.DoubleTotalSum,
FieldHeader = "Total Amount"
});
// Average price
pivotChart1.PivotCalculations.Add(new PivotComputationInfo
{
FieldName = "UnitPrice",
Format = "C2",
SummaryType = SummaryType.DoubleAverage,
FieldHeader = "Avg Price"
});
}
关键属性和方法
核心属性
| 属性 | 类型 | 说明 |
|---|---|---|
ItemSource | object | 数据源(IEnumerable 或 DataTable) |
PivotAxis | PivotItemCollection | 图表轴字段(分层) |
PivotLegend | PivotItemCollection | 图例/系列字段 |
PivotCalculations | PivotComputationInfoCollection | 计算/汇总字段 |
ChartTypes | PivotChartTypes | 图表类型(Line、Column、Area 等) |
AllowDrillDown | bool | 启用下钻/上钻操作 |
EnableUpdating | bool | 数据变化时自动更新 |
PivotItem 属性
| 属性 | 类型 | 说明 |
|---|---|---|
FieldMappingName | string | 要绑定的数据字段名称 |
TotalHeader | string | 汇总行的标题文本 |
FieldHeader | string | 字段的显示标题 |
PivotComputationInfo 属性
| 属性 | 类型 | 说明 |
|---|---|---|
FieldName | string | 要计算的字段名称 |
Format | string | 数字格式字符串 |
SummaryType | SummaryType | 聚合类型(Sum、Average、Count 等) |
FieldHeader | string | 计算项的显示名称 |
主要方法
| 方法 | 说明 |
|---|---|
BeginUpdate() | 暂停图表更新,以便执行批量操作 |
EndUpdate() | 恢复图表更新并刷新 |
Refresh() | 手动刷新图表 |
常见用例
商业智能仪表板
- 按产品、地区和时间段可视化销售数据
- 从年度视图逐级向下钻取到季度和月度视图
- 比较多个指标(数量、收入、利润)
财务分析
- 按部门、期间和类别显示财务数据
- 通过分层下钻分析预算与实际支出
- 可视化各业务部门的利润/亏损趋势
营销分析
- 按渠道、地区和时间段分析营销活动表现
- 比较多个 KPI(展示次数、点击次数、转化次数)
- 从营销活动级别向下钻取到广告组级别
性能注意事项
- 使用 BeginUpdate/EndUpdate 执行批量数据操作,以避免多次重绘
- 限制层级深度——3-4 个层级最有利于性能和易用性
- 绑定数据前先筛选数据,而不是绑定整个数据集
- 考虑数据量——对于非常大的数据集(100k+ 行),请预先聚合数据
最佳实践
- 创建透视图表控件前,务必先注册许可证密钥
- 在 PivotAxis 中定义清晰的层级结构,以便直观地下钻
- 使用描述性 TotalHeader 值,帮助用户更好地理解
- 适当设置计算项格式(货币、百分比、数字)
- 仅当数据具有有意义的层级结构时,才启用下钻
- 使用分组栏或字段列表,方便用户进行交互式探索