Bonjour,
J'ai sur ma fenêtre un DataGrid qui peut contenir quelques milliers de lignes, celui-ci est bindé sur une ObservableCollection<MonType>. Lorsque je souhaite trier une de mes colonnes qui est bindé sur une propriété de ma classe MonType.maPropriete, cela peut prendre jusqu'à 30 secondes !!!! Et du coup ma fenêtre se retrouve freezée pendant tout ce temps..
Je souhaiterais dans un premier temps pouvoir placer le curseur de ma souris en Cursors.Wait (et replacer en Cursors.Arrow en fin de traitement) mais aussi également exécuter ce tri dans un Thread ou BackgroundWorker !
Il y a donc l'événement "Sorting" du DataGrid, auquel j'ai tenté quelques essais ...
Je laisse l'idée du BackgroundWorker quand j'aurais trouvé la méthode de tri !
Donc lorsque je click sur l'entête de la colonne j'arrive bien dans la méthode de l'évenement "Sorting", j'y ai donc placé mon changement de cursor :
Donc le changement de curseur est bien effectué et le tri aussi (après 30sec), mais comment détecter la fin du tri ?? Afin de pouvoir replacer le curseur en "Cursors.Arrow" ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 private void dataGrid_Salles_Sorting ( object sender, DataGridSortingEventArgs e ) { Mouse.OverrideCursor = Cursors.Wait; }
J'ai donc tenté de faire le tri moi même et d'empêcher le tri automatique :
Donc la j'aperçois bien mon curseur changer, mais mon tri ne dur plus que 1 sec, il y a eu un léger tri mais il n'est pas correct.. On retrouve les données qui ne sont pas ranger alphabétiquement !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 private void dataGrid_Salles_Sorting ( object sender, DataGridSortingEventArgs e ) { Mouse.OverrideCursor = Cursors.Wait; e.Handled = true; ICollectionView dataView = CollectionViewSource.GetDefaultView ( ( ( DataGrid ) sender ).ItemsSource ); dataView.SortDescriptions.Clear ( ); ListSortDirection direction = ( e.Column.SortDirection != ListSortDirection.Ascending ) ? ListSortDirection.Ascending : ListSortDirection.Descending; dataView.SortDescriptions.Add ( new SortDescription ( e.Column.ToString ( ), direction ) ); e.Column.SortDirection = direction; dataView.Refresh ( ); Mouse.OverrideCursor = Cursors.Arrow; }
Et de plus lorsque je reclick sur la colonne, aucun changement n'est effectué alors qu'en débug la propriété "SortDirection" passe bien de "Ascending" à "Descending"...
Si quelqu'un pourrait m'aider à trouver la bonne méthode de tri, ça serait cool ! Puis par la suite je pourrais enfin penser à placer ce tri dans un Thread/BackgroundWorker...
Merci d'avance.
Partager