C# WPF Datagrid:清除列排序

C# WPF Datagrid:清除列排序,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,我在我的应用程序中使用了一个WPF数据网格,通过点击标题可以对列进行排序 我想知道是否有任何方法可以通过编程清除列的排序 我尝试对一列进行排序,然后清除MyDataGrid.Items.SortDescriptions,但该集合为空(即使对一列进行了排序) 我还尝试: MyDataGridColumn.SortDirection = null; 问题是列指示消失了,但在编辑单元格和切换行时仍会进行排序 没有办法清除列的排序吗 编辑(为了清楚起见):问题是,如果用户重新单击同一列标题,我希望允许

我在我的应用程序中使用了一个WPF数据网格,通过点击标题可以对列进行排序

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

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

我还尝试:

MyDataGridColumn.SortDirection = null;
问题是列指示消失了,但在编辑单元格和切换行时仍会进行排序

没有办法清除列的排序吗


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

将所有列的
CanUserSort
设置为
false
-

foreach (var a in MyDataGrid.Columns)
{
    a.CanUserSort = false;
}

在DataGrid的XAML代码中,可以添加CanUserSortColumns=“False”。然后,noboady将无法同时对任何列进行排序。

这是一个小代码段,用于禁用对
DataGridView
的排序

for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
    dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}
for(int i=0;i
以下是您需要的:

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;
    }
}
原始资料来源:


我想知道的是M$没有在XAML中放入ClearSort()方法的想法…

您可以使用以下代码将其关闭

<DataGridTextColumn Header="Header Name" CanUserSort="False"/>

这是我在程序中使用的(我有一个重置按钮,用它来清除数据网格上的排序)

工作起来很有魅力

干杯,国际航空运输组织作为延伸

    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;
        }
    }

这不会阻止列再次被排序吗?我只是想删除特定列的排序,而不是禁用所有列的排序。那么,这不是你想要的吗?你不能在xaml中将这些特定列的此属性设置为false吗?@RV1987我想他希望用户能够手动对所有列进行排序,但是,他还希望通过编程更改排序以响应用户输入(比如,按下按钮)。问题是,如果用户重新单击同一列标题,我希望再次允许排序,因此将CanUserSort设置为false会有问题,即使它是在XAML中完成的。简言之,我试图做的是,一旦一个已排序的列有一个已修改的单元格,就防止对行进行排序。我想强制用户重新单击标题@ean5533正确:)我不知道当你编辑一行时它会出现。@Blam是的,它会。如果选择另一行,被编辑的单元格将对其行进行排序。例如,从CollectionView中清除:问题中已经提到,这种技术不适合。@Ren-这是一个用于禁用DataGridView排序的小代码。对于(int i=0;i 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; } }