2010-10-01 2 views
3

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

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

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

FileListingGrid.ItemsSource = listFiles1; 

Но это порождает «„Сортировку“не допускается во время операции AddNew или EditItem.»

Он отлично работает, когда данные столбец не отсортирован, но всякий раз, когда я сортировать данные и придется повторно -генерировать данные столбца, он выдает следующую ошибку.

ответ

0

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

2

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

2

Есть два способа решить эту проблему

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) Другой способ сделать сетку данных только для чтения.

Смежные вопросы