IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Tri/Sort d'une colonne d'un DataGrid


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique (Débutant)
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique (Débutant)
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut Tri/Sort d'une colonne d'un DataGrid
    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 :
    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;
     
    }
    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" ??

    J'ai donc tenté de faire le tri moi même et d'empêcher le tri automatique :
    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;
    }
    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 !
    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.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 81
    Par défaut
    Petite question : Est-ce que tu as activé la Virtualisation des lignes au niveau de ta DataGrid ?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique (Débutant)
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique (Débutant)
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    Non, je ne connais pas la méthode de virtualisation.. Qu'est-ce ?

Discussions similaires

  1. Tri numérique lors clic sur le titre d'une colonne d'un datagrid
    Par boubou38 dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 31/08/2012, 14h33
  2. Mauvais focus lors du tri d'une colonne sur un datagrid
    Par Scorpi0 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/10/2007, 14h18
  3. Réponses: 2
    Dernier message: 02/05/2005, 11h57
  4. [VB.NET]Colorier l'en-tête d'une colonne d'un DataGrid
    Par San Soussy dans le forum ASP.NET
    Réponses: 5
    Dernier message: 08/12/2004, 17h08
  5. [VB.NET] Accès à une colonne d'un DataGrid
    Par fabthebreton dans le forum ASP.NET
    Réponses: 3
    Dernier message: 08/06/2004, 12h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo