【问题标题】:WPF DataGrid Sorting - Data is visually sorted. Underlying data is not sortedWPF DataGrid 排序 - 数据以可视方式排序。基础数据未排序
【发布时间】:2012-08-12 22:48:55
【问题描述】:

有人可以为这个问题提供一些指导吗:

我有一个绑定到 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。

数据表按第一列排序并显示内容。 用户可以通过单击名称或路径列/标题对其进行排序,并且视觉排序是/显示正常。问题是当我通过选择特定行来检查网格数据时,DataTable 的数据仍未排序。

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

这是我观察到的:

  1. 在 DataGridColumnHeader 上添加 Click 事件处理程序会触发该事件。 我观察到 columnHeader.SortDirection (在发件人中)的值是 CURRENT 值,而不是目标值。说给定列是否正确 排序顺序经历以下阶段: null --> 升序 降序 --> 升序 从升到降

I.E.通过知道当前状态,下一个状态是可确定的。

  1. 我可以在 DataGridColumnHeader 的 SortDirection 属性中放置一个触发器以查找 Ascending/Descending/null,但接下来呢?我可以对此执行代码吗? 如果是这样,你能给我看一个代码片段吗?

我浏览过类似的帖子并尝试执行以下操作:

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

  • 我将 SortedMemberPath= "xx" 添加到我的 XAML 到特定的 DataGridTextColumn 条目中。

非常感谢任何帮助。

【问题讨论】:

    标签: wpf datagrid


    【解决方案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
    }
    

    【讨论】:

    • 该操作与 DataGridColumnHeader Click 事件没有什么不同。 IE。 SortDirection 是 BEFORE 值。
    • 我假设排序方向遵循我上面指出的模式并相应地编码。我添加了一个字典来将第一列(名称)映射到我的 ID(第三隐藏列)并相应地重新排序。也许不是最好的方法,但效果很好。
    猜你喜欢
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多