Сохранить пользовательский порядок сортировки в WPF DataGrid
у меня есть WPF DataGrid, который заполнен данными из DataSet. У меня CanUserSortColumns значение правда.
можно ли сохранить сортировку, указанную пользователем при обновлении сетки? У меня есть сохранение элемента, который был выбран с помощью
  object selectedItem = dgInvoiceHeads.SelectedItem;
перед обновлением происходит, а затем размещение
 dgInvoiceHeads.SelectedItem = selectedItem;
после обновления.
но я не могу заставить его сохранить указанный вид.
4 ответов
следующий код был извлечен из этого сообщение на форуме и он показывает, как получить описания сортировки и информацию о столбце и восстановить его.
List<DataGridColumn> GetColumnInfo(DataGrid dg) {
    List<DataGridColumn> columnInfos = new List<DataGridColumn>();
    foreach (var column in dg.Columns) {
        columnInfos.Add(column);
    }
    return columnInfos;
}
List<SortDescription> GetSortInfo(DataGrid dg) {
    List<SortDescription> sortInfos = new List<SortDescription>();
    foreach (var sortDescription in dg.Items.SortDescriptions) {
        sortInfos.Add(sortDescription);
    }
    return sortInfos;
}
void SetColumnInfo(DataGrid dg, List<DataGridColumn> columnInfos) {
    columnInfos.Sort((c1, c2) => { return c1.DisplayIndex - c2.DisplayIndex; });
    foreach (var columnInfo in columnInfos) {
        var column = dg.Columns.FirstOrDefault(col => col.Header == columnInfo.Header);
        if (column != null) {
            column.SortDirection = columnInfo.SortDirection;
            column.DisplayIndex = columnInfo.DisplayIndex;
            column.Visibility = columnInfo.Visibility;
        }
    }
}
void SetSortInfo(DataGrid dg, List<SortDescription> sortInfos) {
    dg.Items.SortDescriptions.Clear();
    foreach (var sortInfo in sortInfos) {
        dg.Items.SortDescriptions.Add(sortInfo);
    }
}
вы пытались получить collectionview для набора данных?
CollectionViewSource.GetDefaultView(yourDataSet).SortDescriptions
это даст вам массив текущих sortdescriptions. Затем вы можете сохранить их, и в следующий раз применить их следующим образом
CollectionViewSource.GetDefaultView(yourDataSet).SortDescriptions.Add(...)
надеюсь, что это помогает.
один из моих коллег придумал. Кажется, он работает правильно. Единственное, что я думаю, заголовки столбцов должны быть одинаковыми в DataGrid, как и в DB.
string sortHeader;
string prevSortHeader;
SortDescription sd;
private void dgInvoiceHeads_Sorting(object sender, DataGridSortingEventArgs e) {
  sortHeader = e.Column.Header.ToString();
  if (sortHeader == prevSortHeader) {
    sd = new SortDescription(sortHeader, ListSortDirection.Descending);
  }
  else {
    sd = new SortDescription(sortHeader, ListSortDirection.Ascending);
  }
  prevSortHeader = sortHeader;
}
HTH
 private void testGrid_Sorting(object sender, DataGridSortingEventArgs e)
        {
 ListSortDirection direction = (e.Column.SortDirection != ListSortDirection.Ascending) ?
                                ListSortDirection.Ascending : ListSortDirection.Descending;
// You will get the current direction in direction
        }
This is another solution
