#Region "Trier Listview" ' Trier en fonction de la colonne cliquée. Private Sub ListView1_ColumnClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick 'Obtenez la nouvelle colonne de tri. Dim new_sorting_column As ColumnHeader = _ ListView1.Columns(e.Column) ' Calculez le nouvel ordre de tri. Dim sort_order As System.Windows.Forms.SortOrder If m_SortingColumn Is Nothing Then ' Nouvelle colonne. Croissant Trier. sort_order = SortOrder.Ascending Else ' Voir si c'est la même colonne. If new_sorting_column.Equals(m_SortingColumn) Then ' Même colonne. Mettez l'ordre de tri. If m_SortingColumn.Text.StartsWith("> ") Then sort_order = SortOrder.Descending Else sort_order = SortOrder.Ascending End If Else ' Nouvelle colonne. Croissant Trier. sort_order = SortOrder.Ascending End If ' Supprimer l'indicateur de l'ancien tri. m_SortingColumn.Text = m_SortingColumn.Text.Substring(2) End If 'Afficher le nouvel ordre de tri. m_SortingColumn = new_sorting_column If sort_order = SortOrder.Ascending Then m_SortingColumn.Text = "> " & m_SortingColumn.Text Else m_SortingColumn.Text = "< " & m_SortingColumn.Text End If ' Créer un comparateur. ListView1.ListViewItemSorter = New ListViewComparer(e.Column, sort_order) ' Trier. ListView1.Sort() End Sub #End Region #Region "Comparateur" 'Met en œuvre un comparateur pour les colonnes de ListView. Class ListViewComparer Implements IComparer Private m_ColumnNumber As Integer Private m_SortOrder As SortOrder Public Sub New(ByVal column_number As Integer, ByVal sort_order As SortOrder) m_ColumnNumber = column_number m_SortOrder = sort_order End Sub 'Comparer les articles dans la colonne appropriée 'pour les objets x et y. Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare Dim item_x As ListViewItem = DirectCast(x, ListViewItem) Dim item_y As ListViewItem = DirectCast(y, ListViewItem) 'Obtenez les valeurs sous-élément. Dim string_x As String If item_x.SubItems.Count <= m_ColumnNumber Then string_x = "" Else string_x = item_x.SubItems(m_ColumnNumber).Text End If Dim string_y As String If item_y.SubItems.Count <= m_ColumnNumber Then string_y = "" Else string_y = item_y.SubItems(m_ColumnNumber).Text End If ' Les comparer. If m_SortOrder = SortOrder.Ascending Then If IsNumeric(string_x) And IsNumeric(string_y) Then Return Val(string_x).CompareTo(Val(string_y)) ElseIf IsDate(string_x) And IsDate(string_y) Then Return DateTime.Parse(string_x).CompareTo(DateTime.Parse(string_y)) Else Return String.Compare(string_x, string_y) End If Else If IsNumeric(string_x) And IsNumeric(string_y) Then Return Val(string_y).CompareTo(Val(string_x)) ElseIf IsDate(string_x) And IsDate(string_y) Then Return DateTime.Parse(string_y).CompareTo(DateTime.Parse(string_x)) Else Return String.Compare(string_y, string_x) End If End If End Function End Class #End Region