ListView tri multicolonnes [Résolu]

Signaler
Messages postés
39
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
24 juillet 2012
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour la communauté !

J'ai un petit souci avec un projet C#,je m'explique : je dois réaliser une DVDthèque sans base de données. J'utilise donc le système des fichiers XML pour stocker mes données, etc...Tout ceci marche sans problème, mon application est quasiment aboutie, mais il me reste un souci avec ma ListView qui affiche mes données des DVD :
j'ai dérivé un IComparer pour trier mes objets, ça marche, et j'ai aussi géré le clic sur les colonnes de ma ListView. En gros, je vous fait pas de dessin, lorsque je clique sur une colonne, ça me met le contenu dans l'ordre, normal !

Mon souci, c'est quand j'essaie de trier les genres : en effet, j'ai plusieurs DVD qui ont comme genre "Action", et quand je veux trier mes DVD par genre, ça met bien dans l'ordre dans la ListView, mais mes DVD sont parfois "inversés" (vu que Action et Action c'est pareil je sais pas comment le programme compare )

Donc il faudrait que je trie mes DVD ET par genre ET par nom et je galère un peu

Si une âme charitable pouvait m'indiquer la marche à suivre ça m'aiderait beaucoup !!!

Merci d'avance !!!

3 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Salut,

Dans ce cas là il faut que tu tries sur les 2 colonnes.

En gros tu veux que les DVD soient groupés par action, et que ces groupes soient ordonnés par titre de DVD.
Du coup avoir :

A Action
D Action
C Drame
B Western

Pour le petit exemple (bateau) : 

   [System.Diagnostics.DebuggerDisplay("{Title} / {Genre}")]
   class DVD
   {
       public DVD(String title, String genre)
       {
           this._title = title;
           this._genre = genre;
       }


       private String _title;
       private String _genre;


       public String Title
       {
           get { return _title; }
           set { _title = value; }
       }


       public String Genre
       {
           get { return _genre; }
           set { _genre = value; }
       }
   }

et l'implémentation de IComparer :

    class DVDComparer : IComparer
    {
        int IComparer.Compare(object x, object y)
        {
            Int32 ret;


            DVD xDVD = x as DVD;
            DVD yDVD = y as DVD;


            Int32 genreCompare = String.Compare(xDVD.Genre, yDVD.Genre, StringComparison.CurrentCultureIgnoreCase);
            // Si les genres sont identiques, on compare les titres
            if ( genreCompare == 0)
            {
                ret = String.Compare(xDVD.Title, yDVD.Title, StringComparison.CurrentCultureIgnoreCase);
            }
            else
            {
                ret = genreCompare;
            }


            return ret;
        }
    }

Il y aura probablement des ajustements à faire sur la comparaison mais le principe est là.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Ce sont des attributs.
Dans le cas de l'attribut DebuggerDisplay, son rôle est essentiellement de faciliter le debugage : http://msdn2.microsoft.com/fr-fr/library/x810d419(VS.80).aspx

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
39
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
24 juillet 2012

Merci bien coq !!!!

En fait c'est tout bête j'avais pas vu ça comme ça ^^!!!
Et juste une petite question pour la forme : je vois beaucoup de choses entre crochets (ici [System.Diagnostics.DebuggerDisplay("{Title} / {Genre}")]) ça sert à quoi exactement :| ?