Trier un listview en VB.NET [Résolu]

Messages postés
52
Date d'inscription
mercredi 4 août 2004
Dernière intervention
12 mai 2008
- 26 mars 2008 à 10:48 - Dernière réponse :
Messages postés
52
Date d'inscription
mercredi 4 août 2004
Dernière intervention
12 mai 2008
- 26 mars 2008 à 12:52
Bonjour à tous,

J'ai fait des recherches ... infructueuses malheureusement .. concernant ce soucis :
En VB.NET 2005 J'ai un listview avec 5 colonnes.
Avec l'événement ColumnClick je veux trier mon listview. Mais je ne parviens à ne trier que la première colonne quelque soit l'en-tête sur lequel je click.

Mon code est celui-ci :
    Private Sub LVResultat_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles LVResultat.ColumnClick
        Select Case e.Column
            Case 0

                If Me.LVResultat.Sorting = SortOrder.Ascending Then
                    Me.LVResultat.Sorting = SortOrder.Descending
                Else
                    Me.LVResultat.Sorting = SortOrder.Ascending
                End If

            Case Else
                Exit Select
        End Select

    End Sub
Comment utliser ma variable e.column pour trier la bonne colonne.
La doc microsoft indique qu'il faut créer une classe ListViewItemComparer basé sur une implémentation de IComparer.Compare mais je trouve cela un peu compliqué pour une tâche simple.

Quelqu'un a-t-il déjà réfléchi à cette question ?

Deuxième soucis :
Ma listview est rempli avec des données venant d'une BD. J'ai une requête simple avec une Clause ORDER BY. Et là plus aucun tri possible avec le code ci-dessus! oups!

Merci de votre aide
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
26 mars 2008 à 11:22
3
Merci
compliqué ?

l'exemple donné sur la MSDN ne semble pas l'être...
lien:http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpref/html/frlrfsystemwindowsformslistviewclasslistviewitemsortertopic.asp

' ColumnClick event handler.
Private Sub ColumnClick(ByVal o As Object, ByVal e As ColumnClickEventArgs)
' Set the ListViewItemSorter property to a new ListViewItemComparer
' object. Setting this property immediately sorts the
' ListView using the ListViewItemComparer object.
Me.listView1.ListViewItemSorter = New ListViewItemComparer(e.Column)
End Sub

End Class

' Implements the manual sorting of items by columns.
Class ListViewItemComparer
Implements IComparer

Private col As Integer

Public Sub New()
col = 0
End Sub

Public Sub New(ByVal column As Integer)
col = column
End Sub

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements IComparer.Compare
Return [String].Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
End Function
End Class


Ca apporte une certaine souplesse de faire ainsi...
je vois pas pourquoi tu cherches midi à quatorze heures.

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Renfield
Messages postés
52
Date d'inscription
mercredi 4 août 2004
Dernière intervention
12 mai 2008
26 mars 2008 à 10:51
0
Merci
re
oubliez la deuxième question ... ça marche
reste la première
Commenter la réponse de Le grand Zorro
Messages postés
52
Date d'inscription
mercredi 4 août 2004
Dernière intervention
12 mai 2008
26 mars 2008 à 11:29
0
Merci
J'ai bien la même doc. et je vais sûrement me rabattre dessus.
Je trouve ça un peu compliqué de créer une fonction .. et même une classe .. pour une fonctionnalité qui devrait être de base dans un controle comme le listview. en VB6 il ne suffisait de dire quelle colonne on voulait trier? mais je me trompe peut-être...
Commenter la réponse de Le grand Zorro
Messages postés
920
Date d'inscription
vendredi 3 août 2007
Dernière intervention
27 octobre 2008
26 mars 2008 à 11:34
Commenter la réponse de Kristof_Koder
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
26 mars 2008 à 11:35
0
Merci
non, il suffisait effectivement de modifier le SortKey.

mais avec ce grand désavantage d'être géné avec des colonnes qui contiennent des valeurs numériques, des dates, etc...

1
10
11
2
20
21
...

ou bien

01/02/2008
11/04/2008
12/03/2008
...
Commenter la réponse de Renfield
Messages postés
920
Date d'inscription
vendredi 3 août 2007
Dernière intervention
27 octobre 2008
26 mars 2008 à 11:36
0
Merci
Plus complexe en .NEt qu'en VB6, peut-être mais cela est bcp plus puissant, puisque tu peux définir toi-même la façon dont seront trié les données
Commenter la réponse de Kristof_Koder
Messages postés
52
Date d'inscription
mercredi 4 août 2004
Dernière intervention
12 mai 2008
26 mars 2008 à 12:52
0
Merci
Bon je m'incline...
j'ai rempris l'exemple de la do msdn et j'ai mis ça dans l'événement click :
        Static OrdreDeTri As System.Windows.Forms.SortOrder
        OrdreDeTri = 1 - OrdreDeTri
        Me.LVResultat.ListViewItemSorter = New ListViewComparer(e.Column, OrdreDeTri)

ça marche nikel
Merci à tous
Commenter la réponse de Le grand Zorro

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.