是否可以在WPF数据网格中执行此操作:
|-------------- A header------------|---------------B Header---------------|
|-----A1Header----|----A2Header-----|-----B1Header-----|-----B2Header------|
|-----A1Data------|----A2 Data------|-----B1 Data------|-----B2 Data-------|
|-----A1Data------|----A2 Data------|-----B1 Data------|-----B2 Data-------|
- 谢谢-谢谢
2条答案
按热度按时间o2gm4chl1#
This Thread可能会帮助您实现您正在尝试做的事情。
它不直接从DataGrid获取功能,而是将DataGrid Package 在常规Grid中,并使用绑定列(具有多列跨度)添加超级标题。
希望有一个很好的简单方法可以直接从DataGrid中完成此操作,但如果没有,这可能是您可以接受的变通方法。
k7fdbhmy2#
对于分组列的问题,我可以提供三种解决方案。
溶液1
通过源集合的
ICollectionView
使用常规分组。此组是垂直的,意味着它们共享相同的列。溶液2
建立巢状数据来源。其想法是每一个数据行系结至个别的数据集,该数据集是由
DataGrid
显示,而DataGrid
会加入至数据行的DataGridTemplateColumn
。它是每个数据行群组的DataGrid
。此解决方案的缺点是数据结构的条件约束非常严格。不支援DataTable,也不会自动产生数据行。如果允许对列进行排序或重新排序,则工作量会增加。但是对于分组表的简单显示,此解决方案已经足够好了。用法示例
主窗口.xaml
建议通过
DataGrid
禁用表格修改。要美化外观,比如将组名居中,或者覆盖DataGridRow
模板为未聚焦的网格添加行高亮,这非常简单。实现示例
嵌套表的数据结构:
数据网格行项.cs
根元素。顶级
DataGrid
的单行项将显示列组标题。每个
DataGridColumnItem
对应一个列组。数据网格列项.cs
每个
DataGridColumnItem
将组成一个列组。约会.cs
显示在组的
DataGrid
中的实际数据模型。视图模型.cs
数据网格助手.cs
一个附加的行为,可帮助在多个
DataGrid
示例之间同步所选行。该行为最初是为不同的问题编写的,但也可以在此方案中重用。它允许创建DataGrid
元素的同步组。溶液3
一个更强大的解决方案是实现一个自定义控件。这样,例如,重新排序/调整列的大小,添加/删除行和自定义都非常方便。
自定义控件
GroupingDataGrid
基本上将自定义的DataGrid
Package 到Grid
中。此解决方案支持自动生成和显式列定义。可以调整列组和各个列的大小。
GroupingDataGrid
托管的DataGrid
可以不受任何限制地使用,布局简洁,列组的定义(使用Grid定义风格的GroupDefinition
)非常方便。若要自订群组信头,请定义以
GroupingDataGridHeader
(即ContenControl
)为目的的Style
。GroupingDataGrid
是我的库中的一个现有控件。我从源代码中删除了一些代码,主要是模板等自定义功能,以使帖子尽可能简洁。用法示例
源代码
分组数据网格.cs
分组数据网格标题.cs
组定义.cs
组定义集合.cs
数据网格列范围宽度到组标头宽度转换器.cs
一般.xaml