WPF Datagrid:清除列排序

时间:2012-11-15 16:26:21

标签: c# wpf wpfdatagrid

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

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

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

我也尝试过:

MyDataGridColumn.SortDirection = null;

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

是否无法清除列的排序?

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

7 个答案:

答案 0 :(得分:14)

以下是您的需求:

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()方法...

答案 1 :(得分:4)

为所有列设置CanUserSortfalse -

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

像魅力一样。

干杯,Iato

答案 4 :(得分:0)

作为扩展...

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

答案 5 :(得分:-2)

在DataGrid的XAML代码中,您可以添加CanUserSortColumns =“False”。然后noboady可以在朗姆酒时对任何专栏进行排序。

答案 6 :(得分:-2)

这是一个禁用DataGridView

排序的小代码段
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
    dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}