Столбец таблицы данных Ошибка генерации сортировки - PullRequest
5 голосов
/ 01 октября 2010

У меня есть столбец таблицы данных, значения столбца которого связаны с данными. Я использовал DataGridTemplateColumn и мне нужно использовать сортировку в этом столбце.

my:DataGridTemplateColumn SortMemberPath="FileName" Header="Name" IsReadOnly="True" MinWidth="150"

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

FileListingGrid.ItemsSource = listFiles1;

Но это генерирует "" Сортировка "не разрешена во время транзакции AddNew или EditItem."

Работает нормально, когда данные столбца не сортируются, но всякий раз, когда я сортирую данные и мне нужно заново сгенерировать данные столбца, выдается следующая ошибка.

Ответы [ 3 ]

4 голосов
/ 27 февраля 2014

Существует два способа решения этой проблемы

1) CommitNew () и CommitEdit () перед пользовательской сортировкой

private void DataGrid_ParametersList_Sorting(object sender, DataGridSortingEventArgs e)
{
DataGridColumn column = e.Column;

//prevent the built-in sort from sorting
e.Handled = true;

ListSortDirection direction = (column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending;

//set the sort order on the column
column.SortDirection = direction;

//use a ListCollectionView to do the sort.
ListCollectionView lcv = (ListCollectionView)CollectionViewSource.GetDefaultView(DataGrid_ParametersList.ItemsSource);

ParametersListComparer customComparer = new ParametersListComparer();
customComparer.SortDirection = direction;
customComparer.SortMemeberPath = column.SortMemberPath;

if (lcv.IsAddingNew) 
lcv.CommitNew();
if (lcv.IsEditingItem)
lcv.CommitEdit();

//apply the sort
lcv.CustomSort = customComparer;
}

2) Другой способ - сделать сетку данных доступной только для чтения.

<my:DataGrid x:Name="DataGrid"                             
IsReadOnly="True"
Sorting="DataGrid_Sorting">
2 голосов
/ 13 февраля 2011

После ListCollectiontView.AddNewItem( item ); не забудьте ListCollectiontView.CommitNew(); Этот метод завершает транзакцию добавления и сохраняет ожидающий новый элемент. То же самое для CommitEdit()

0 голосов
/ 07 октября 2010

Можете ли вы использовать CollectionViewSource и указать свой SortMemberPath (в вашем случае «FileName») в качестве SortDescription?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...