IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Comment trier une listview [Débutant]


Sujet :

VB.NET

  1. #1
    Membre confirmé Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Par défaut Comment trier une listview
    Bonjour
    Je voudrais trier une Listview1 par ordre alphabétique de la 2eme colonne

    comment m'y prendre.?

    les tutos que j'ai trouvé expliquent à partir d'un click sur la colonne mais comment le faire par programmation sans click dessus?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Quelle techno ? Windows Forms, WPF, Silverlight, ASP.NET ?

    Je vais supposer qu'il s'agit de Windows Forms...

    Il faut implémenter un comparateur (une classe qui implémente l'interface IComparer) pour comparer les ListViewItems. En voilà un réutilisable qui permet de spécifier la colonne selon laquelle trier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Class ListViewItemComparer
    	Implements IComparer
    	Private ReadOnly _columnIndex As Integer
     
    	Public Sub New(columnIndex As Integer)
    		_columnIndex = columnIndex
    	End Sub
     
    	Public Function Compare(x As Object, y As Object) As Integer
    		Dim itemX As ListViewItem = DirectCast(x, ListViewItem)
    		Dim itemY As ListViewItem = DirectCast(y, ListViewItem)
    		Dim subItemX As ListViewItem.ListViewSubItem = itemX.SubItems(_columnIndex)
    		Dim subItemY As ListViewItem.ListViewSubItem = itemY.SubItems(_columnIndex)
    		Dim textX As String = subItemX.Text
    		Dim textY As String = subItemY.Text
    		Return String.Compare(textX, textY, True)
    	End Function
    End Class
    Ca s'utilise comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listView1.ListViewItemSorter = New ListViewItemComparer(1)
    Pour trier selon la colonne cliquée, tu peux gérer l'évènement ColumnClick :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub lv_ColumnClick(sender As Object, e As ColumnClickEventArgs)
    	listView1.ListViewItemSorter = New ListViewItemComparer(e.Column)
    End Sub
    EDIT: après avoir écrit ça je réalise que c'est presque exactement l'exemple qui est dans la doc... j'aurais mieux fait de faire un copier/coller

  3. #3
    Membre confirmé Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Par défaut
    merci tomlev pour votre reponse ?

    je suis sous vb.net express 2008

    en fait j'avais plus ou moins trouvé un code equivalant
    mais mon problème est pour l'adapter à une routine qui ne passe pas par un click sur la colonne
    je veux trier à partir d'une sub qui tri la listview par la colonne 2

    mon niveau débutant autodidacte ne me permet pas d'adapter le code
    mais je progresse ( il est dur de reculer à ce stade )

    un petit coup de pouce svp

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bah c'est pas plus difficile, je t'ai déjà donné le code pour le faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listView1.ListViewItemSorter = New ListViewItemComparer(1)
    (la 2e colonne est celle qui a l'index 1, puisque les index commencent à 0)

  5. #5
    Membre confirmé Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Par défaut
    re
    il est vrai que j'avais zapé la bonne réponse

    mais j'ai encore un petit problème
    j'ai mis le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Class ListViewItemComparer
    Implements IComparer
    ....
    End Class
    en debut du code de ma Form1vb

    et j'ai une erreur sur:
    Implements IComparer
    Class'ListViewComparer'doit implémenter 'Function Compare(x As Object,y As Object)As Integer' pour l'interface'System.Collection.IComparer'.
    où faut il donc placer le code de la class ListViewItemComparer

    ( c'est la première fois que je dois rajouter une class à mon code ! )

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Oh!Tofocus Voir le message
    où faut il donc placer le code de la class ListViewItemComparer
    Normalement en la mettant dans la classe de ta Form ça devrait marcher, tu as dû faire un truc de travers... Mais de toutes façons, il vaut mieux la mettre dans un fichier à part (Projet > Ajouter > Classe, et tu colles le code de ListViewItemComparer)

  7. #7
    Membre confirmé Avatar de Oh!Tofocus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 217
    Par défaut
    Merci pour toutes ces infos
    Je viens de trouver le problème
    j'ai rajouté : Implements IComparer.Compare
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
    et tout rentre dans l'ordre

    encore merci pour ton aide

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Oh!Tofocus Voir le message
    j'ai rajouté : Implements IComparer.Compare
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
    et tout rentre dans l'ordre
    Ah ok... j'avais écrit le code en C# et je l'avais passé dans un convertisseur automatique pour traduire en VB, mais ce convertisseur est loin d'être parfait . Je pensais pas que la clause Implements devait être spécifiée explicitement... en C# ce n'est pas nécessaire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment trier une listview
    Par samgan dans le forum VB.NET
    Réponses: 0
    Dernier message: 28/04/2010, 18h14
  2. Réponses: 7
    Dernier message: 10/05/2006, 11h15
  3. [C#] Comment trier une DataTable ?
    Par royto dans le forum C#
    Réponses: 2
    Dernier message: 23/03/2006, 01h15
  4. Comment trier une table paradox dans un Ttable sur un Dbgrid
    Par amireve dans le forum Bases de données
    Réponses: 5
    Dernier message: 26/12/2005, 19h28
  5. Comment trier une DBGRID en cliquant sur une colonne
    Par sessime dans le forum Bases de données
    Réponses: 8
    Dernier message: 09/10/2004, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo