ListView tri multicolonnes [Résolu]

Messages postés
39
Date d'inscription
jeudi 26 mai 2005
Dernière intervention
24 juillet 2012
- - Dernière réponse : cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 2 avril 2007 à 18:41
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 !!!
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
88
3
Merci
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
*/

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 91 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
88
3
Merci
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
*/

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 91 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_coq
Messages postés
39
Date d'inscription
jeudi 26 mai 2005
Dernière intervention
24 juillet 2012
0
Merci
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 :| ?
Commenter la réponse de tigerskin

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.