ndu*_*uru 8 wpf grouping datagrid
我有一个 WPF DataGrid,它显示具有 60 多列和多达 10000 行的任何数据集。DataGrid 可以非常快速地加载完整的数据集并很好地处理它们。
colA colB colC colD colE ...
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
Run Code Online (Sandbox Code Playgroud)
然而,行被分成组。我需要显示一个文本字符串的组标题,并能够展开/折叠组。
我可以对 DataGrid 使用分组,它看起来不错,但最初显示大组的速度非常慢。
colA colB colC colD colE ...
^ group title A
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
^ group title B
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
Run Code Online (Sandbox Code Playgroud)
我可以通过添加一个包含组描述的额外列在 DataGrid 外部对自己进行分组。然后我可以通过更改提供给网格的数据集来折叠/展开任何组。这非常快,但它看起来很垃圾,因为它浪费了很多空间,尤其是对于长组标题。
group colA colB colC colD colE ...
group title A
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
group title B
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
Run Code Online (Sandbox Code Playgroud)
我想要的是两全其美,即快速和漂亮,能够像 DataGrid 分组一样显示数据,但要在外部进行分组。
colA colB colC colD colE ...
^ Very long comment about the data ...
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
^ Another arbitrarily long comment...
1 2 3 4 5
5 6 7 8 9
2 3 4 3 4
Run Code Online (Sandbox Code Playgroud)
知道如何以这种方式显示我的组标题吗?
这是一个老问题,但是我在这里添加了答案以供将来参考:
从 .Net 4.5 开始,微软增加了IsVirtualizingWhenGrouping属性。设置 的这个属性DataGrid可以True解决这个问题。
<DataGrid VirtualizingPanel.IsVirtualizingWhenGrouping="True">
Run Code Online (Sandbox Code Playgroud)
来源: 本博客 (显然这个博客不再可用)
它最初加载速度可能很快,因为它使用虚拟化。这意味着它仅加载屏幕上的可见项目,而不是全部 10000 行和 60 列。我猜测分组时必须加载所有内容,这就是您遇到速度减慢的原因。
为了解决这个问题,我可能会研究创建自己的控件(使用虚拟化)并预先对数据进行分组。也许将 ItemsControl 绑定到分组数据,包括扩展器,当组扩展时,仅获取该组的数据并将其加载到另一个 itemscontrol 中。您可以使用 Grid.IsSharedScopeSize 和 SharedSizeGroup 来保持列宽一致。
| 归档时间: |
|
| 查看次数: |
4617 次 |
| 最近记录: |