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.

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
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
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
Remarque : J'effectue ici une comparaison de chaines, il faudra implémenter différement si on compare des nombres par exemple.

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.