如何在WPF DataGrid中处理组小计和目标行?

cha*_*r m 12 c# wpf datagrid wpfdatagrid

我正在实现一个包含许多关键值的项目的WPF DataGrid.项目按项目类别分组.

对于每个类别,应该有:

  1. 在每个关键值列中显示该列的所有行的总和的行.
  2. 绑定到的数据源网格中不属于目标行的目标行.目标行告诉每一列当年的目标是什么(例如,要花多少钱).

这些行应始终位于每个组的顶部(排序过滤).

我的第一个解决方案是将这些数据放在组头中.这不是一个好的解决方案,因为组头不支持列.即它应该通过获得列宽来构造.

这可以做到,但当用户想要重新排序和隐藏列时,它会变得复杂.

DataGrid使用的是CollectionViewSource,因此它没有填充C#代码.基本上我正在扩展这个例子:http://msdn.microsoft.com/en-us/library/ff407126.aspx

谢谢和最诚挚的问候 - matti

cha*_*r m 0

一种选择可能是在数据源中添加具有名称特殊值和其他没有意义的字段的行,并使用 DataTrigger 以特殊颜色或其他颜色显示它们。

无论如何,过滤都是在 C# 中完成的,因此不会影响这些行。

排序是这里唯一的问题。如果仅仅告诉组中某些行的顺序始终为 0 且顺序为 1,那就太酷了。但因为我不知道该怎么做,所以我必须在 C# 中为所有列进行自定义排序,而不是仅仅声明排序:

<CollectionViewSource.SortDescriptions>
   <!-- Requires 'xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"' declaration. -->
    <scm:SortDescription PropertyName="ProjectName"/>
    <scm:SortDescription PropertyName="Complete" />
    <scm:SortDescription PropertyName="DueDate" />
</CollectionViewSource.SortDescriptions>
Run Code Online (Sandbox Code Playgroud)

编辑:最重要的是,与我的第一个解决方案(组标题中的总和信息)相比,它有一个主要缺点,因为在过滤更改时,我应该更新仅针对可见行计算的总和。

所以这个答案是一个完整的 hack,缺乏所有的优雅,并且没有使用 WPF 应该拥有的好功能:(