Trier un listview en VB.NET

Résolu
Le grand Zorro Messages postés 50 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 12 mai 2008 - 26 mars 2008 à 10:48
Le grand Zorro Messages postés 50 Date d'inscription mercredi 4 août 2004 Statut Membre 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
A voir également:

7 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
26 mars 2008 à 11:22
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.
3
Le grand Zorro Messages postés 50 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 12 mai 2008
26 mars 2008 à 10:51
re
oubliez la deuxième question ... ça marche
reste la première
0
Le grand Zorro Messages postés 50 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 12 mai 2008
26 mars 2008 à 11:29
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...
0
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
26 mars 2008 à 11:34
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
26 mars 2008 à 11:35
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
...
0
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
26 mars 2008 à 11:36
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
0
Le grand Zorro Messages postés 50 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 12 mai 2008
26 mars 2008 à 12:52
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
0
Rejoignez-nous