Tri d'une ListView à l'aide des en-têtes [Résolu]

Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Dernière intervention
20 mars 2009
- 9 juil. 2004 à 19:09 - Dernière réponse :
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Dernière intervention
20 février 2007
- 23 mai 2006 à 15:58
Bonjour,

J'ai une ListView, avec une en-tête, contenant 3 colonnes.
Je souhaiterai trier ma ListView suivant la colonne correspondant à l'en-tête qui serait cliquée.

:question) Quelqu'un aurait-il une idée :question)

Merci d'avance

-=[JuS]=-

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live
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
- 9 juil. 2004 à 21:15
4
Merci
une classe implémentant IComparer :
public class ListViewItemSorter : IComparer
{
private int colonne;

public ListViewItemSorter(int colonne)
{
this.colonne = colonne;
}

public int Compare(object x, object y)
{
string itemx = ((ListViewItem)x).SubItems[colonne].Text;
string itemy = ((ListViewItem)y).SubItems[colonne].Text;

// tri par ordre croissant
return String.Compare(itemx, itemy);
}
}


et ceci dans la methode associée à l'event ColumnClick du ListView :
((ListView)sender).ListViewItemSorter = new ListViewItemSorter(e.Column);
((ListView)sender).Sort();


Cocoricoooooooo !!!!

Merci cs_coq 4

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_coq
Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Dernière intervention
20 mars 2009
- 12 juil. 2004 à 11:18
0
Merci
Ce code fonctionne parfaitement !!!

Merci ma poule :-p

-=[JuS]=-

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live
Commenter la réponse de cs_JuS
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Dernière intervention
20 février 2007
- 23 mai 2006 à 15:58
0
Merci
Merci, je devais comparer des date à partir d'une listView également et j'ai fais comme ca en rajoutant l'ordre croissant ou décroissant(dans mon cas je n'ai qu'une colonne où je suis certain d'avoir le bon format donc pas de test avant le Convert.To):

     public class ListViewItemSorter : IComparer
    {
        private int colonne;
        public bool croissant = true;

        public ListViewItemSorter(int colonne, bool croissant)
        {
            this.colonne = colonne;
            this.croissant = croissant;
        }

        public int Compare(object x, object y)
        {
            DateTime datex = new DateTime(
                    Convert.ToInt32(((ListViewItem)x).SubItems[colonne].Text.Substring(6, 4)),
                    Convert.ToInt32(((ListViewItem)x).SubItems[colonne].Text.Substring(3, 2)),
                    Convert.ToInt32(((ListViewItem)x).SubItems[colonne].Text.Substring(0, 2)));
            DateTime datey = new DateTime(
                    Convert.ToInt32(((ListViewItem)y).SubItems[colonne].Text.Substring(6, 4)),
                    Convert.ToInt32(((ListViewItem)y).SubItems[colonne].Text.Substring(3, 2)),
                    Convert.ToInt32(((ListViewItem)y).SubItems[colonne].Text.Substring(0, 2)));

            if (datex < datey)
            {
                if(croissant)
                    return -1;
                else
                    return 1;
            }
            else if (datex == datey)
            {
                return 0;
            }
            else
            {
                if (!croissant)
                    return -1;
                else
                    return 1;
            }

        }
    }
Commenter la réponse de cs_fcolo

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.