L'objet ListView dispose d'une propriété ListViewItemSorter de type IComparer. Cela permet d'implémenter sa propre gestion du tri.
Pour ce faire, il faut créer une classe dérivant de IComparer implémentant la méthode Compare.
Ensuite, il suffit d'intercepter le click sur les colonnes (événement ColumnClick) et d'instancier cette classe.
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
19
20
21
22
23
24
25
26
27
28
29
30 Class ListViewItemComparer Implements IComparer Private col As Integer Private sortOrder As SortOrder Public Sub New() col = 0 sortOrder = Windows.Forms.SortOrder.Ascending End Sub Public Sub New(ByVal column As Integer) col = column sortOrder = Windows.Forms.SortOrder.Ascending End Sub Public Sub New(ByVal column As Integer, ByVal s As SortOrder) col = column sortOrder = s End Sub Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare If sortOrder = Windows.Forms.SortOrder.Ascending Then Return String.Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text) Else Return String.Compare(CType(y, ListViewItem).SubItems(col).Text, CType(x, ListViewItem).SubItems(col).Text) End If End Function End Class
Remarque : J'effectue ici une comparaison de chaines, il faudra implémenter différement si on compare des nombres par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub ListView1_ColumnClick(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick If Me.ListView1.Sorting = SortOrder.Ascending Then Me.ListView1.Sorting = SortOrder.Descending Else Me.ListView1.Sorting = SortOrder.Ascending End If Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, Me.ListView1.Sorting) End Sub
Ceci est un extrait sur developpez.com. Et comme il est dit il ne marche pas vraiment lorsque la colonne de la listview contient des entier. J'ai tenter de modifier tout cela pour trier les nombres avec d'autre algo etc mais je nage completement. Quelqu'un peut-il m'aider svp ? Le but étant de trier les colonnes de la listview comportant des entiers.
Partager