【问题标题】:Forcing a secondary sort on a DataGrid强制对 DataGrid 进行二次排序
【发布时间】:2019-03-12 22:44:45
【问题描述】:

是否有一种方法可以以编程方式应用 WPF DataGrid 基于多个属性的排序?

我有一个多列 DataGrid,其中包含一个列,当对其他列进行排序时,我总是希望在值分组中按字母顺序排列。

我见过的所有自定义排序实现都使用IComparer,但这仅提供与其关联的单个列中的值。

例如,如果我们有以下两列未排序的数据:

  • A1
  • D2
  • C2
  • B1

如果我们对第二列应用排序,第一列就会在每个分组中任意排序:

  • A1
  • B1
  • D2
  • C2

我正在寻找的是在第二列中的任何相同值组中,第一列按字母顺序排列:

  • A1
  • B1
  • C2
  • D2

是否有替代 IComparer 的替代方法来公开完整模型?

【问题讨论】:

标签: c# wpf wpfdatagrid


【解决方案1】:

您是否查看过 SortMemberPath?

<DataGrid.Columns>
    <DataGridTextColumn Header="Some Caption"  Width="200"
        CanUserSort="True"
        Binding="{Binding SomeDataField}" 
        SortMemberPath="OtherNonShowingField"/>
</DataGrid.Columns>

因此,如果您要列出列表中的数据 或从 DataTable 通过其 DataColumn 引用,您始终可以添加另一个字段或列,该字段或列在该字段中具有组合的 A + B 部分。所以即使不显示列,也可以作为排序的基础。

【讨论】:

  • 好主意。简单而优雅。很好用,谢谢!
  • @nullPainter,也适用于您希望以 mm-dd-yyyy 格式(例如)显示的日期/时间字段等内容,但希望基于 DATETIME 进行实际排序,而不是显示的字符表示。
猜你喜欢
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2011-08-12
相关资源
最近更新 更多