14

我在我的应用程序中使用 WPF Datagrid,可以通过单击标题对列进行排序。

我想知道是否有任何方法可以以编程方式清除列的排序?

我尝试对一列进行排序然后清除MyDataGrid.Items.SortDescriptions,但该集合是空的(即使一列已排序)。

我也试过:

MyDataGridColumn.SortDirection = null;

问题是列指示消失了,但是在编辑单元格和切换行时仍然会发生排序。

有没有办法清除列的排序?

编辑(为清楚起见):问题是如果用户重新单击同一列标题,我想允许再次排序,因此将 CanUserSort 设置为 false 将是有问题的,即使它是在 XAML 中完成的。简而言之,我试图做的是,一旦排序的列有一个被修改的单元格,就阻止对行进行排序。我想强制用户重新点击标题。

4

7 回答 7

17

这是您需要的:

using System.Windows.Data;
using System.ComponentModel;

ICollectionView view = CollectionViewSource.GetDefaultView(grid.ItemsSource);
if (view != null)
{
    view.SortDescriptions.Clear();
    foreach (DataGridColumn column in grid.Columns)
    {
        column.SortDirection = null;
    }
}

原文来源:https ://stackoverflow.com/a/9533076/964053

我想知道的是,M$ 不使用 ClearSort() 方法的想法是什么……

于 2014-02-05T20:45:14.523 回答
4

为所有列设置CanUserSort为-false

foreach (var a in MyDataGrid.Columns)
{
    a.CanUserSort = false;
}
于 2012-11-15T16:32:57.937 回答
4

作为扩展...

    public static  void ClearSort(this DataGrid grid)
    {
        var view = CollectionViewSource.GetDefaultView(grid.ItemsSource);
        view?.SortDescriptions.Clear();

        foreach (var column in grid.Columns)
        {
            column.SortDirection = null;
        }
    }
于 2019-05-09T08:06:45.183 回答
0

在 XAML 中,您可以使用此代码将其关闭。

<DataGridTextColumn Header="Header Name" CanUserSort="False"/>
于 2014-02-11T07:15:58.713 回答
0

这就是我在我的程序中使用的(我有一个 RESET 按钮并使用它来清除数据网格上的排序)。

System.Windows.Data.CollectionViewSource.GetDefaultView(MY_DATA_GRID.ItemsSource).SortDescriptions.Clear();

奇迹般有效。

干杯,伊托

于 2018-05-16T19:40:17.030 回答
-2

在 DataGrid 的 XAML 代码中,您可以添加 CanUserSortColumns="False"。然后没有人将能够在 rumtime 对任何列进行排序。

于 2013-03-26T09:13:56.203 回答
-2

这是一个小代码片段,用于禁用DataGridView.

for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
    dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}
于 2013-03-26T10:02:59.423 回答