syncfusion-winui-datagrid
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseImplementing WinUI DataGrid (SfDataGrid)
实现WinUI DataGrid(SfDataGrid)
Comprehensive guide for implementing the Syncfusion WinUI DataGrid control. SfDataGrid is a high-performance, feature-rich control for displaying and manipulating tabular data in WinUI 3 applications with support for sorting, filtering, grouping, editing, summaries, and more.
这是一份实现Syncfusion WinUI DataGrid控件的全面指南。SfDataGrid是一款高性能、功能丰富的控件,用于在WinUI 3应用中展示和操作表格数据,支持排序、筛选、分组、编辑、汇总等多种功能。
When to Use This Skill
何时使用本教程
Use this skill when you need to:
- Display tabular data with 100 to 1,000,000+ rows in WinUI applications
- Implement sortable, filterable, and groupable data views
- Enable inline editing with validation for data entry scenarios
- Perform CRUD (Create, Read, Update, Delete) operations on datasets
- Export data to Excel format
- Display hierarchical data with master-details views
- Implement drag-and-drop row reordering
- Show data summaries and aggregations (sum, average, count, etc.)
- Handle real-time data updates with ObservableCollection
- Create data-centric enterprise Windows desktop applications
Important Note: In WinUI 3, DataContext is not directly inherited from Window. You must explicitly set DataContext on the Grid or Page element in XAML (e.g., ) for data binding to work properly.
<Grid DataContext="{x:Bind ViewModel}">当你需要完成以下需求时可使用本教程:
- 在WinUI应用中展示100到1,000,000+行的表格数据
- 实现可排序、可筛选、可分组的数据视图
- 为数据录入场景启用带校验的行内编辑功能
- 对数据集执行CRUD(创建、读取、更新、删除)操作
- 将数据导出为Excel格式
- 用主从视图展示层级数据
- 实现拖拽行重排序功能
- 展示数据汇总和聚合结果(求和、平均值、计数等)
- 用ObservableCollection处理实时数据更新
- 开发以数据为核心的企业级Windows桌面应用
重要提示: 在WinUI 3中,DataContext不会从Window直接继承。你必须在XAML中显式为Grid或Page元素设置DataContext(例如 ),数据绑定才能正常工作。
<Grid DataContext="{x:Bind ViewModel}">DataGrid Overview
DataGrid概述
SfDataGrid () is the primary grid control for WinUI 3, offering:
Syncfusion.UI.Xaml.DataGrid.SfDataGrid- High Performance: UI and data virtualization for millions of rows
- Rich Data Operations: Sorting, filtering, grouping with multi-level support
- Editing: Cell/row/batch editing modes with validation
- Summaries: Table, group, and caption summaries with custom aggregates
- Selection: Single/multiple row or cell selection
- Styling: Conditional formatting and custom templates
- Export: Excel export with styling
- Advanced Features: Unbound rows, master-details, frozen columns
Required Packages:
- Main Package: (DataGrid control)
Syncfusion.Grid.WinUI - Export Package: (Excel export functionality)
Syncfusion.GridExport.WinUI - Excel Engine: (Required for export operations)
Syncfusion.XlsIO.NET
Namespace:
Syncfusion.UI.Xaml.DataGridSfDataGrid()是WinUI 3的核心网格控件,提供以下能力:
Syncfusion.UI.Xaml.DataGrid.SfDataGrid- 高性能: 支持UI和数据虚拟化,可承载数百万行数据
- 丰富的数据操作: 支持多级排序、筛选、分组
- 编辑能力: 单元格/行/批量编辑模式,附带校验功能
- 汇总功能: 表格、分组、标题汇总,支持自定义聚合
- 选择能力: 单选/多选行或单元格
- 样式自定义: 条件格式和自定义模板
- 导出能力: 带样式的Excel导出
- 高级特性: 未绑定行、主从视图、冻结列
所需依赖包:
- 核心包: (DataGrid控件本身)
Syncfusion.Grid.WinUI - 导出包: (Excel导出功能)
Syncfusion.GridExport.WinUI - Excel引擎: (导出操作必备依赖)
Syncfusion.XlsIO.NET
命名空间:
Syncfusion.UI.Xaml.DataGridDocumentation and Navigation Guide
文档与导航指南
Getting Started
入门指南
📄 Read: references/getting-started.md
- Data binding fundamentals (IEnumerable, ObservableCollection, dynamic objects)
- ItemsSource configuration and INotifyCollectionChanged
- Complex property binding (nested objects)
- Basic XAML setup and first implementation
- Package installation and namespace registration
📄 阅读: references/getting-started.md
- 数据绑定基础(IEnumerable、ObservableCollection、动态对象)
- ItemsSource配置与INotifyCollectionChanged
- 复杂属性绑定(嵌套对象)
- 基础XAML设置与首次实现
- 包安装与命名空间注册
Column Management
列管理
📄 Read: references/columns.md
- Column types (GridTextColumn, GridNumericColumn, GridCheckBoxColumn, GridComboBoxColumn, etc.)
- Auto-generate vs manual column definition
- Column width modes (Auto, Star, None, Fill, AutoLastColumnFill)
- Column sizing, autosize, and resizing
- Show/hide columns and column visibility
- Column reordering and freeze columns
📄 阅读: references/columns.md
- 列类型(GridTextColumn、GridNumericColumn、GridCheckBoxColumn、GridComboBoxColumn等)
- 自动生成列与手动列定义
- 列宽模式(Auto、Star、None、Fill、AutoLastColumnFill)
- 列尺寸调整、自动适配、拖拽调整
- 列的显示/隐藏与可见性控制
- 列重排序与冻结列
Data Operations (Sorting, Filtering, Grouping)
数据操作(排序、筛选、分组)
📄 Read: references/data-operations.md
- Sorting: Single and multi-column sorting, custom sorting, tri-state sorting
- Filtering: Programmatic filters, view predicates, column filters, filter row
- Grouping: Single and multi-level grouping, custom grouping, expand/collapse
- Group summaries and filter row configuration
📄 阅读: references/data-operations.md
- 排序:单列与多列排序、自定义排序、三态排序
- 筛选:程序化筛选、视图谓词、列筛选、筛选行
- 分组:单级与多级分组、自定义分组、展开/折叠
- 分组汇总与筛选行配置
Editing and Data Validation
编辑与数据校验
📄 Read: references/editing-validation.md
- Editing modes: Cell, row, and batch editing
- Edit triggers (single click, double click, F2 key)
- Data validation rules and error handling
- CRUD operations: Add, update, delete rows
- Commit and cancel changes
- CurrentCell navigation
📄 阅读: references/editing-validation.md
- 编辑模式:单元格、行、批量编辑
- 编辑触发条件(单击、双击、F2键)
- 数据校验规则与错误处理
- CRUD操作:添加、更新、删除行
- 提交与取消修改
- CurrentCell导航
Selection
选择功能
📄 Read: references/selection.md
- Selection modes: Single, Multiple, Extended, None
- Selection units: Row and Cell
- SelectedItem, SelectedItems, SelectedIndex binding
- Programmatic selection and SelectionChanged events
- Select all rows, select ranges
📄 阅读: references/selection.md
- 选择模式:单选、多选、扩展选择、无选择
- 选择单位:行、单元格
- SelectedItem、SelectedItems、SelectedIndex绑定
- 程序化选择与SelectionChanged事件
- 全选行、选择范围
Summaries and Aggregations
汇总与聚合
📄 Read: references/summaries.md
- Table summaries (displayed in footer)
- Group summaries (per group)
- Caption summaries (in group headers)
- Built-in aggregates (Sum, Average, Count, Min, Max)
- Custom summary calculations
- Summary row positioning
📄 阅读: references/summaries.md
- 表格汇总(展示在页脚)
- 分组汇总(每个分组单独展示)
- 标题汇总(展示在分组头部)
- 内置聚合函数(求和、平均值、计数、最小值、最大值)
- 自定义汇总计算
- 汇总行位置配置
Conditional Styling
条件样式
📄 Read: references/conditional-styling.md
- Row styling based on data conditions
- Cell styling and custom templates
- Style selectors for dynamic styling
- Visual states and data templates
- Alternating row colors
📄 阅读: references/conditional-styling.md
- 基于数据条件的行样式
- 单元格样式与自定义模板
- 动态样式的样式选择器
- 视觉状态与数据模板
- 交替行颜色
Advanced Row Features
高级行特性
📄 Read: references/row-features.md
- Row drag and drop for reordering
- Unbound rows (above and below data rows)
- Master-details view for hierarchical data
- Row height customization
- Details view templates and nested grids
📄 阅读: references/row-features.md
- 拖拽行重排序
- 未绑定行(数据行上方和下方)
- 层级数据的主从视图
- 行高自定义
- 详情视图模板与嵌套网格
Data Virtualization
数据虚拟化
📄 Read: references/virtualization.md
- Data virtualization for large datasets
- UI virtualization (enabled by default)
- Virtual mode configuration
- Performance optimization techniques
- Handling 100,000+ rows efficiently
📄 阅读: references/virtualization.md
- 面向大数据集的数据虚拟化
- UI虚拟化(默认启用)
- 虚拟模式配置
- 性能优化技巧
- 高效处理100,000+行数据
Export to Excel
导出到Excel
📄 Read: references/export.md
- Export entire grid to Excel (.xlsx)
- Export options and customization
- Export selected rows only
- Export with styling and formatting
- Custom export logic
📄 阅读: references/export.md
- 将整个网格导出为Excel(.xlsx格式)
- 导出选项与自定义配置
- 仅导出选中行
- 带样式和格式导出
- 自定义导出逻辑
Quick Start Example
快速入门示例
Basic Implementation
基础实现
xml
<!-- MainPage.xaml -->
<Page xmlns:dataGrid="using:Syncfusion.UI.Xaml.DataGrid">
<Grid>
<dataGrid:SfDataGrid x:Name="sfDataGrid"
ItemsSource="{Binding Orders}"
AutoGenerateColumns="True"
AllowSorting="True"
AllowFiltering="True"
AllowEditing="True"
SelectionMode="Single" />
</Grid>
</Page>csharp
// MainPage.xaml.cs
using Microsoft.UI.Xaml.Controls;
using System.Collections.ObjectModel;
public sealed partial class MainPage : Page
{
public ObservableCollection<Order> Orders { get; set; }
public MainPage()
{
this.InitializeComponent();
Orders = new ObservableCollection<Order>
{
new Order { OrderID = 1001, CustomerName = "Maria Anders", Country = "Germany", Total = 250.50M },
new Order { OrderID = 1002, CustomerName = "Ana Trujillo", Country = "Mexico", Total = 180.00M },
new Order { OrderID = 1003, CustomerName = "Antonio Moreno", Country = "Mexico", Total = 420.75M }
};
sfDataGrid.ItemsSource = Orders;
}
}
// Order Model
public class Order
{
public int OrderID { get; set; }
public string CustomerName { get; set; }
public string Country { get; set; }
public decimal Total { get; set; }
}xml
<!-- MainPage.xaml -->
<Page xmlns:dataGrid="using:Syncfusion.UI.Xaml.DataGrid">
<Grid>
<dataGrid:SfDataGrid x:Name="sfDataGrid"
ItemsSource="{Binding Orders}"
AutoGenerateColumns="True"
AllowSorting="True"
AllowFiltering="True"
AllowEditing="True"
SelectionMode="Single" />
</Grid>
</Page>csharp
// MainPage.xaml.cs
using Microsoft.UI.Xaml.Controls;
using System.Collections.ObjectModel;
public sealed partial class MainPage : Page
{
public ObservableCollection<Order> Orders { get; set; }
public MainPage()
{
this.InitializeComponent();
Orders = new ObservableCollection<Order>
{
new Order { OrderID = 1001, CustomerName = "Maria Anders", Country = "Germany", Total = 250.50M },
new Order { OrderID = 1002, CustomerName = "Ana Trujillo", Country = "Mexico", Total = 180.00M },
new Order { OrderID = 1003, CustomerName = "Antonio Moreno", Country = "Mexico", Total = 420.75M }
};
sfDataGrid.ItemsSource = Orders;
}
}
// Order Model
public class Order
{
public int OrderID { get; set; }
public string CustomerName { get; set; }
public string Country { get; set; }
public decimal Total { get; set; }
}Common Patterns
常用模式
Pattern 1: Manual Column Definition
模式1:手动定义列
xml
<dataGrid:SfDataGrid x:Name="sfDataGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding Orders}">
<dataGrid:SfDataGrid.Columns>
<dataGrid:GridTextColumn MappingName="OrderID"
HeaderText="Order ID"
Width="120" />
<dataGrid:GridTextColumn MappingName="CustomerName"
HeaderText="Customer"
Width="200" />
<dataGrid:GridTextColumn MappingName="Country"
Width="150" />
<dataGrid:GridNumericColumn MappingName="Total"
HeaderText="Total Amount"
Width="150" />
</dataGrid:SfDataGrid.Columns>
</dataGrid:SfDataGrid>xml
<dataGrid:SfDataGrid x:Name="sfDataGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding Orders}">
<dataGrid:SfDataGrid.Columns>
<dataGrid:GridTextColumn MappingName="OrderID"
HeaderText="Order ID"
Width="120" />
<dataGrid:GridTextColumn MappingName="CustomerName"
HeaderText="Customer"
Width="200" />
<dataGrid:GridTextColumn MappingName="Country"
Width="150" />
<dataGrid:GridNumericColumn MappingName="Total"
HeaderText="Total Amount"
Width="150" />
</dataGrid:SfDataGrid.Columns>
</dataGrid:SfDataGrid>Pattern 2: Enable Sorting and Filtering
模式2:启用排序和筛选
xml
<dataGrid:SfDataGrid x:Name="sfDataGrid"
ItemsSource="{Binding Orders}"
AllowSorting="True"
AllowFiltering="True"
FilterRowPosition="FixedTop"
AllowTriStateSorting="True" />xml
<dataGrid:SfDataGrid x:Name="sfDataGrid"
ItemsSource="{Binding Orders}"
AllowSorting="True"
AllowFiltering="True"
FilterRowPosition="FixedTop"
AllowTriStateSorting="True" />Pattern 3: Enable Grouping
模式3:启用分组
xml
<dataGrid:SfDataGrid x:Name="sfDataGrid"
ItemsSource="{Binding Orders}"
AllowGrouping="True"
ShowGroupDropArea="True" />csharp
// Programmatic grouping
sfDataGrid.GroupColumnDescriptions.Add(new GroupColumnDescription { ColumnName = "Country" });xml
<dataGrid:SfDataGrid x:Name="sfDataGrid"
ItemsSource="{Binding Orders}"
AllowGrouping="True"
ShowGroupDropArea="True" />csharp
// 程序化分组
sfDataGrid.GroupColumnDescriptions.Add(new GroupColumnDescription { ColumnName = "Country" });Pattern 4: Enable Editing
模式4:启用编辑
xml
<dataGrid:SfDataGrid x:Name="sfDataGrid"
ItemsSource="{Binding Orders}"
AllowEditing="True"
EditTrigger="OnDoubleTap"
NavigationMode="Cell" />xml
<dataGrid:SfDataGrid x:Name="sfDataGrid"
ItemsSource="{Binding Orders}"
AllowEditing="True"
EditTrigger="OnDoubleTap"
NavigationMode="Cell" />Pattern 5: Add Summaries
模式5:添加汇总
xml
<dataGrid:SfDataGrid x:Name="sfDataGrid"
ItemsSource="{Binding Orders}"
ShowRowHeader="True">
<dataGrid:SfDataGrid.TableSummaryRows>
<dataGrid:GridTableSummaryRow ShowSummaryInRow="False">
<dataGrid:GridTableSummaryRow.SummaryColumns>
<dataGrid:GridSummaryColumn Name="TotalSum"
MappingName="Total"
SummaryType="DoubleAggregate"
Format="'Total: {Sum:C}'" />
<dataGrid:GridSummaryColumn Name="OrderCount"
MappingName="OrderID"
SummaryType="CountAggregate"
Format="'Count: {Count}'" />
</dataGrid:GridTableSummaryRow.SummaryColumns>
</dataGrid:GridTableSummaryRow>
</dataGrid:SfDataGrid.TableSummaryRows>
</dataGrid:SfDataGrid>xml
<dataGrid:SfDataGrid x:Name="sfDataGrid"
ItemsSource="{Binding Orders}"
ShowRowHeader="True">
<dataGrid:SfDataGrid.TableSummaryRows>
<dataGrid:GridTableSummaryRow ShowSummaryInRow="False">
<dataGrid:GridTableSummaryRow.SummaryColumns>
<dataGrid:GridSummaryColumn Name="TotalSum"
MappingName="Total"
SummaryType="DoubleAggregate"
Format="'Total: {Sum:C}'" />
<dataGrid:GridSummaryColumn Name="OrderCount"
MappingName="OrderID"
SummaryType="CountAggregate"
Format="'Count: {Count}'" />
</dataGrid:GridTableSummaryRow.SummaryColumns>
</dataGrid:GridTableSummaryRow>
</dataGrid:SfDataGrid.TableSummaryRows>
</dataGrid:SfDataGrid>Key Properties
核心属性
| Property | Type | Description |
|---|---|---|
| | Data source for the grid (IEnumerable) |
| | Auto-create columns from data source properties |
| | Collection of manually defined columns |
| | Enable/disable sorting (default: false) |
| | Enable/disable filtering (default: false) |
| | Enable/disable grouping (default: false) |
| | Enable/disable editing (default: false) |
| | Single, Multiple, Extended, None |
| | Row or Cell |
| | Cell or Row navigation |
| | None, Star, Auto, SizeToCells, SizeToHeader, AutoLastColumnFill, AutoWithLastColumnFill |
| | Show drag-and-drop area for grouping |
| | FixedTop, Top, Bottom |
| 属性 | 类型 | 描述 |
|---|---|---|
| | 网格的数据源(IEnumerable类型) |
| | 是否从数据源属性自动创建列 |
| | 手动定义的列集合 |
| | 启用/禁用排序(默认:false) |
| | 启用/禁用筛选(默认:false) |
| | 启用/禁用分组(默认:false) |
| | 启用/禁用编辑(默认:false) |
| | 单选、多选、扩展选择、无选择 |
| | 选择单位:行或单元格 |
| | 导航模式:单元格或行导航 |
| | None、Star、Auto、SizeToCells、SizeToHeader、AutoLastColumnFill、AutoWithLastColumnFill |
| | 是否展示分组拖拽区域 |
| | 筛选行位置:FixedTop、Top、Bottom |
Common Use Cases
常见使用场景
Enterprise Data Entry Application
企业级数据录入应用
- Enable editing, validation, and CRUD operations
- Use batch editing mode for efficiency
- Implement SelectedItems binding for bulk operations
- Add table summaries for data insights
- 启用编辑、校验和CRUD操作
- 使用批量编辑模式提升效率
- 实现SelectedItems绑定以支持批量操作
- 添加表格汇总以提供数据洞察
Data Analysis Dashboard
数据分析看板
- Enable sorting, filtering, and grouping
- Add summaries at table and group levels
- Use conditional styling to highlight key data
- Implement export to Excel for reporting
- 启用排序、筛选和分组
- 在表格和分组层级添加汇总
- 使用条件样式高亮关键数据
- 实现Excel导出用于报表生成
Master-Details Data Viewer
主从数据查看器
- Configure DetailsViewDefinition for nested data
- Use hierarchical data binding
- Enable expand/collapse for details
- Style master and details rows differently
- 为嵌套数据配置DetailsViewDefinition
- 使用层级数据绑定
- 支持详情的展开/折叠
- 为主行和详情行设置不同样式
Large Dataset Browser (100K+ rows)
大数据集浏览器(10万+行)
- Enable data virtualization
- Disable features not needed (grouping, summaries)
- Use frozen columns for important data
- Implement incremental loading
- 启用数据虚拟化
- 关闭不需要的功能(分组、汇总)
- 冻结重要列
- 实现增量加载
Transaction Management System
交易管理系统
- Enable row drag-and-drop for prioritization
- Use unbound rows for totals and summary info
- Implement real-time updates with ObservableCollection
- Add validation rules for data integrity
- 启用行拖拽以调整优先级
- 使用未绑定行展示合计和汇总信息
- 用ObservableCollection实现实时更新
- 添加校验规则保证数据完整性
Integration with MVVM
与MVVM集成
csharp
// ViewModel
public class OrderViewModel : INotifyPropertyChanged
{
private ObservableCollection<Order> orders;
private Order selectedOrder;
public ObservableCollection<Order> Orders
{
get => orders;
set { orders = value; OnPropertyChanged(); }
}
public Order SelectedOrder
{
get => selectedOrder;
set { selectedOrder = value; OnPropertyChanged(); }
}
public ICommand DeleteCommand { get; }
public ICommand ExportCommand { get; }
}xml
<!-- View -->
<dataGrid:SfDataGrid ItemsSource="{Binding Orders}"
SelectedItem="{Binding SelectedOrder, Mode=TwoWay}" />csharp
// ViewModel
public class OrderViewModel : INotifyPropertyChanged
{
private ObservableCollection<Order> orders;
private Order selectedOrder;
public ObservableCollection<Order> Orders
{
get => orders;
set { orders = value; OnPropertyChanged(); }
}
public Order SelectedOrder
{
get => selectedOrder;
set { selectedOrder = value; OnPropertyChanged(); }
}
public ICommand DeleteCommand { get; }
public ICommand ExportCommand { get; }
}xml
<!-- View -->
<dataGrid:SfDataGrid ItemsSource="{Binding Orders}"
SelectedItem="{Binding SelectedOrder, Mode=TwoWay}" />Performance Tips
性能优化建议
- Use ObservableCollection for automatic UI updates instead of List<T>
- Set AutoGenerateColumns="False" and define columns manually when possible
- Enable virtualization (enabled by default, don't disable unless needed)
- Freeze essential columns to improve horizontal scrolling performance
- Use ColumnWidthMode="None" for static column widths when data size is known
- Limit grouping levels to 2-3 for better performance
- Use filtering instead of grouping for very large datasets (100K+)
- Dispose the grid in Page.Unloaded event
- 使用ObservableCollection 实现自动UI更新,而不是List<T>
- 尽可能设置 手动定义列
AutoGenerateColumns="False" - 启用虚拟化(默认启用,除非必要不要关闭)
- 冻结核心列 提升横向滚动性能
- 当数据量已知时使用 设置静态列宽
ColumnWidthMode="None" - 将分组层级限制在2-3级以获得更好性能
- 对于超大数据集(10万+行)优先使用筛选而不是分组
- 在Page.Unloaded事件中释放网格资源
Troubleshooting
问题排查
Data not displaying:
- Verify is bound correctly
ItemsSource - Check properties have public getters
- Ensure is set if using binding
DataContext
Editing not working:
- Set
AllowEditing="True" - Set
NavigationMode="Cell" - Verify column has (inherited from grid if not set)
AllowEditing="True"
Poor performance with large datasets:
- Verify virtualization is enabled (default)
- Reduce number of columns
- Use instead of Auto
ColumnWidthMode="None" - Consider data pagination for 500K+ rows
Sorting/Filtering not working:
- Set and/or
AllowSorting="True"AllowFiltering="True" - Verify data source implements IEnumerable
- Check if column has these disabled individually
数据不显示:
- 确认绑定正确
ItemsSource - 检查属性是否有公共getter
- 如果使用绑定,确保已设置
DataContext
编辑功能不生效:
- 设置
AllowEditing="True" - 设置
NavigationMode="Cell" - 确认对应列的(未单独设置时会继承网格的配置)
AllowEditing="True"
大数据集下性能差:
- 确认虚拟化已启用(默认开启)
- 减少列的数量
- 使用代替Auto
ColumnWidthMode="None" - 50万+行数据可以考虑分页
排序/筛选不生效:
- 设置和/或
AllowSorting="True"AllowFiltering="True" - 确认数据源实现了IEnumerable接口
- 检查对应列是否单独禁用了这些功能
Related Components
相关组件
- TreeGrid: For hierarchical tree data
- PivotGrid: For OLAP and pivot table scenarios
- PropertyGrid: For editing object properties
- TreeGrid: 用于层级树状数据展示
- PivotGrid: 用于OLAP和数据透视表场景
- PropertyGrid: 用于编辑对象属性