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