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

cs_JuS 121 Messages postés mardi 15 juillet 2003Date d'inscription 20 mars 2009 Dernière intervention - 9 juil. 2004 à 19:09 - Dernière réponse : cs_fcolo 201 Messages postés mercredi 8 février 2006Date d'inscription 20 février 2007 Dernière intervention
- 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 

3 réponses

Répondre au sujet
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 9 juil. 2004 à 21:15
+4
Utile
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 !!!!
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_coq
cs_JuS 121 Messages postés mardi 15 juillet 2003Date d'inscription 20 mars 2009 Dernière intervention - 12 juil. 2004 à 11:18
0
Utile
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
cs_fcolo 201 Messages postés mercredi 8 février 2006Date d'inscription 20 février 2007 Dernière intervention - 23 mai 2006 à 15:58
0
Utile
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.