Cześć,
chciałbym pogrupować dane w DataGrid i jednocześnie te grupy móc posortować po naciśnięciu nagłówka kolumny po której grupuję.
Np. mam tabelę z uczniami, których grupuję w zależności od klasy (I, II, III, etc..), ale te grupy są posortowane w kolejności II, I, III.
Teraz próbowałem to posortować po naciśnięciu nagłówka, jednak sortują się dane w obrębie tych grup (czego oczywiście nie widać), tak jakby to były trzy osobne datagridy z jednym zestawem nagłówków kolumn.
Utworzyłem sobie obiekt CollectionViewSource, którego źródło jest bindowane z ObservableCollection z ViewModelu, następnie ustawiam właściwość GroupDescriptions na klasę.
ICollectionView cvsStudentsList = CollectionViewSource.GetDefaultView(dgStudentsList.ItemsSource);
if (cvsStudentsList != null && cvsStudentsList.CanGroup)
{
cvsStudentsList.GroupDescriptions.Clear();
cvsStudentsList.GroupDescriptions.Add(new PropertyGroupDescription("Grade"));
}
Sortowanie próbowałem obsłużyć w funkcji wywoływanej po naciśnięciu headera oraz przez funkcję wywoływaną z parametru Sorting ustawionego bezpośrednio w DataGridzie.
Sposoby, w jakie próbowałem to osiągnąć były różne, ale wszystkie sprowadzały się do tego, że ustawiałem parametr SortDescription dla cvsStudentsList na odpowiednie sorotwanie (ASC/DESC). Próbowałem też to sortowanie przypisać bezpośrednio do kolumny, ale efekt taki jak opisałem na początku.
docSourceHdrSortDir = docSourceHdrSortDir == ListSortDirection.Ascending ? ListSortDirection.Descending : ListSortDirection.Ascending;
cvsStudentsList.SortDescriptions.Clear();
cvsStudentsList.SortDescriptions.Add(new SortDescription("Grade", docSourceHdrSortDir));
Ktoś może mnie nakierować w jaki sposób to zrobić?
Bo jak rozumiem, w ten sposób sortuje faktyczne pozycje, które są w datagridzie, a żeby to zadziałało, to muszę posortować jakoś te grupy, które się utworzyły po ustawieniu GroupDescriptions, tylko jak to zrobić?
Dodam, że próbowałem przed sortowaniem wyłączać grupowanie i włączać je po posortowaniu, ale to nic nie dało.
Zanim się zorientowałem, że klasy się sortują (w obrębie grup), to próbowałem też grupować po identyfikatorze klasy a sortować po klasie. Efekt ten sam.