Le grand Zorro
Messages postés50Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention12 mai 2008
-
26 mars 2008 à 10:48
Le grand Zorro
Messages postés50Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention12 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!
' 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.
Le grand Zorro
Messages postés50Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention12 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...
Le grand Zorro
Messages postés50Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention12 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)