Tri d'une ListView à l'aide des en-têtes

[Résolu]
Signaler
Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
20 mars 2009
-
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
-
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

3 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
97
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 !!!!
Messages postés
121
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
20 mars 2009
1
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
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
2
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;
            }

        }
    }