WPF Datagrid: очистить сортировку столбцов

Я использую WPF Datagrid в своем приложении, где столбцы можно сортировать, нажав на заголовок.

Мне было интересно, есть ли способ очистить сортировку столбцов программно?

Я попробовал сортировку столбца и очистка MyDataGrid.Items.SortDescriptions, но эта коллекция была пуста (хотя один столбец был отсортирован).

Я также пробовал:

MyDataGridColumn.SortDirection = null;

Проблема в том, что индикация столбца исчезла, но сортировка по-прежнему происходит при редактировании ячейки и переключении строк.

Нет ли способа удалить сортировку столбцов?

Изменить (для ясности): Проблема в том, что я хотел бы снова разрешить сортировку, если пользователь повторно щелкнет по тому же заголовку столбца, поэтому установка CanUserSort на false будет проблематичной, даже если бы это было сделано в XAML, Короче говоря, то, что я пытаюсь сделать, запрещает упорядочивать строки, как только отсортированный столбец имеет измененную ячейку. Я хочу заставить пользователя повторно щелкнуть заголовок.

Ответ 1

Вот что вам нужно:

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

Исходный источник: fooobar.com/questions/538552/...

То, что я хочу знать, - это то, что думал M $за то, что он не поставил метод ClearSort()...

Ответ 2

Установите CanUserSort в false для всех столбцов -

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

Ответ 3

В XAML вы можете отключить его с помощью этого кода.

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

Ответ 4

Это то, что я использую в своей программе (у меня есть кнопка RESET, и я использую это для очистки сортировки в сетке данных).

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

Работает как шарм.

Ура, ято

Ответ 5

как расширение...

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

Ответ 6

В коде XAML DataGrid вы можете добавить CanUserSortColumns = "False". Тогда noboady сможет сортировать любой столбец во время rumtime.

Ответ 7

Это небольшой фрагмент кода для отключения сортировки DataGridView.

for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
    dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}