WPF DataGrid排序 - 数据按可视方式排序。底层数据未排序

时间:2012-08-16 14:41:55

标签: wpf datagrid

是否有人能够为此问题提供一些指导:

我有一个绑定到DataTable的DataGrid。

相关的XAML&代码:

<DataGrid Name="dataGrid1" IsReadOnly="True" ItemsSource="{Binding}" 
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" />
<DataGridTextColumn Header="Path" Binding="{Binding Path=Path}" />
</DataGrid.Columns>


dataGrid1.DataContext = gridData.dt; // this is a DataTable with 3 columns.

第3个dt列未显示在网格上。它被用作id。

数据表在第一列上排序,并显示内容。 用户可以通过单击它们对Name或Path列/标题中的任何一个进行排序,并在视觉上排序/显示正常。问题是当我通过选择特定行来检查网格数据时,DataTable的数据仍未排序。

我的问题是,在用户对其中一列进行排序时,更新网格底层数据的最佳方法是什么? (这需要在适当的列上对DataTable进行排序)

这就是我所观察到的:

  1. 在DataGridColumnHeader上添加Click事件处理程序会触发事件。 我观察到columnHeader.SortDirection(在发送者中)的值是 CURRENT值,而不是目标值。说一个给定的列是否正确 排序顺序经历以下阶段: null - &gt;上升 降序 - &gt;上升 上升到下降
  2. 即。通过了解当前状态,下一个状态是可确定的。

    1. 我可以在DataGridColumnHeader的SortDirection属性中放置一个触发器,查找Ascending / Descending / null但是接着是什么?我可以针对此执行代码吗? 如果是这样,你能告诉我一个代码片段。
    2. 我已经浏览了类似的帖子并尝试执行以下操作:

      • 通过将我的DataGrid绑定到一个来实验CollectionViewSource。作为实验,我捕获了列标题单击事件并强制列上的排序顺序。这没用。 (我的实施可能有误?)

      • 我在我的XAML中添加了SortedMemberPath =“xx”到特定的DataGridTextColumn条目。

      非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

使用 DataGrid.Sorting 事件:

public class DataGrid : MultiSelector
{
    ...

    //
    // Summary:
    //     Occurs when a column is being sorted.
    public event DataGridSortingEventHandler Sorting;

    ...
}

在事件处理程序中,使用 e.Column 属性找出用于对数据进行排序的列:

void dataGrid1_Sorting(object sender, DataGridSortingEventArgs e)
{
    e.Column ... // TODO
}