Comment trier un contrôle ListView par colonne dans Visual Basic .NET ou Visual Basic 2005

Traductions disponibles Traductions disponibles
Numéro d'article: 319399 - Voir les produits auxquels s'applique cet article
Pour une Visual c# .NET version de cet article, reportez-vous 319401.
Pour une Microsoft Visual Basic 6.0 version de cet article, reportez-vous 170884.
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article décrit étape par étape comment effectuer un tri dans un contrôle ListView en une colonne dans votre Visual Basic .NET ou une application Visual Basic 2005.

Lorsque vous travaillez avec le contrôle ListView, vous souhaiterez peut-être trier son contenu sur la base d'une colonne spécifique. Un exemple de ce type de fonctionnalité se produit dans un Explorateur Windows lorsque vous affichez le contenu d'un dossier sur votre disque dur du programme. Dans Afficher les détails, l'Explorateur Windows affiche des informations sur les fichiers dans ce dossier. Par exemple, vous voyez le nom de fichier, la taille du fichier, le type de fichier et la date à laquelle le fichier a été modifié. Lorsque vous cliquez sur un en-têtes de colonne, la liste est triée par ordre après cette colonne croissant. Lorsque vous cliquez de nouveau sur le même en-tête de colonne, la colonne est triée par ordre décroissant.

L'exemple dans cet article définit une classe qui implémente l'interface IComparer. En outre, cet exemple utilise la méthode compare de la classe CaseInsenstiveComparer pour effectuer la comparaison réelle des éléments. Notez que cette méthode de comparaison n'est pas respecter la casse («Apple» est considéré comme identique à «apple»). Notez également que toutes les colonnes dans cet exemple sont triés de manière «texte». Si vous voulez trier différemment (par exemple, numériquement), vous pouvez remplacer la ligne de code suivante par quelle que soit l'approche que de tri que vous souhaitez utiliser :
compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)
				

Comment faire pour créer l'exemple de projet

  1. Créez un projet Visual Basic .NET ou Visual Basic 2005 Windows Application. Form1 est créé par défaut.

    Remarque Vous devez modifier le code dans Visual Basic 2005. Par défaut, Visual Basic crée deux fichiers pour le projet lorsque vous créez un projet Windows Forms. Si le formulaire appelé Form1, les deux fichiers qui représentent le formulaire sont appelés Form1.vb et Form1.Designer.vb. Vous écrivez le code dans le fichier Form1.vb. Le Concepteur Windows Forms écrit le code dans le fichier Form1.Designer.vb. Le Concepteur Windows Forms utilise le mot clé partial pour diviser l'implémentation de Form1 en deux fichiers distincts. Ce comportement empêche le code généré par le Concepteur d'entrecoupé par votre code.

    Pour plus d'informations sur les nouvelles améliorations de langage Visual Basic 2005, reportez-vous au site Web de MSDN (Microsoft Developer Network) à l'adresse suivante :
    http://msdn2.microsoft.com/en-us/library/ms379584(vs.80).aspx
    Pour plus d'informations sur le Concepteur Windows Forms et les classes partielles, visitez ce site MSDN Web :
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  2. Ajoutez un contrôle ListView à Form1. Dimensionnez le formulaire à plusieurs pouces de large par plusieurs pouces de hauteur.
  3. Collez le code suivant dans la classe du formulaire :
    Private lvwColumnSorter As ListViewColumnSorter
    					
  4. Collez le code suivant au constructeur du formulaire, après l'appel à la méthode InitializeComponent :
    ' Create an instance of a ListView column sorter and assign it 
    ' to the ListView control.
    lvwColumnSorter = New ListViewColumnSorter()
    Me.ListView1.ListViewItemSorter = lvwColumnSorter
    					
  5. Collez le code suivant dans l'événement Load du formulaire :
    Dim columnheader As ColumnHeader    ' Used for creating column headers.
    Dim listviewitem As ListViewItem    ' Used for creating ListView items.
    
    ' Make sure that the view is set to show details.
    ListView1.View = View.Details
    
    ' Create some ListView items consisting of first and last names.
    listviewitem = New ListViewItem("Mike")
    listviewitem.SubItems.Add("Nash")
    Me.ListView1.Items.Add(listviewitem)
    
    listviewitem = New ListViewItem("Kim")
    listviewitem.SubItems.Add("Abercrombie")
    Me.ListView1.Items.Add(listviewitem)
    
    listviewitem = New ListViewItem("Sunil")
    listviewitem.SubItems.Add("Koduri")
    Me.ListView1.Items.Add(listviewitem)
    
    listviewitem = New ListViewItem("Birgit")
    listviewitem.SubItems.Add("Seidl")
    Me.ListView1.Items.Add(listviewitem)
    
    ' Create some column headers for the data.
    columnheader = New ColumnHeader()
    columnheader.Text = "First Name"
    Me.ListView1.Columns.Add(columnheader)
    
    columnheader = New ColumnHeader()
    columnheader.Text = "Last Name"
    Me.ListView1.Columns.Add(columnheader)
    
    ' Loop through and size each column header to fit the column header text.
    For Each columnheader In Me.ListView1.Columns
        columnheader.Width = -2
    Next
    					
  6. Collez le code suivant dans l'événement ColumnClick du ListView :
    ' Determine if the clicked column is already the column that is 
    ' being sorted.
    If (e.Column = lvwColumnSorter.SortColumn) Then
        ' Reverse the current sort direction for this column.
        If (lvwColumnSorter.Order = SortOrder.Ascending) Then
            lvwColumnSorter.Order = SortOrder.Descending
        Else
            lvwColumnSorter.Order = SortOrder.Ascending
        End If
    Else
        ' Set the column number that is to be sorted; default to ascending.
        lvwColumnSorter.SortColumn = e.Column
        lvwColumnSorter.Order = SortOrder.Ascending
    End If
    
    ' Perform the sort with these new sort options.
    Me.ListView1.Sort()
    					
  7. Dans le menu projet, cliquez sur Ajouter une classe pour ajouter une nouvelle classe au projet.
  8. Remplacez tout le code par défaut dans la nouvelle classe par le code suivant :
    Imports System.Collections
    Imports System.Windows.Forms
    
    Public Class ListViewColumnSorter
        Implements System.Collections.IComparer
    
        Private ColumnToSort As Integer
        Private OrderOfSort As SortOrder
        Private ObjectCompare As CaseInsensitiveComparer
    
        Public Sub New()
            ' Initialize the column to '0'.
            ColumnToSort = 0
    
            ' Initialize the sort order to 'none'.
            OrderOfSort = SortOrder.None
    
            ' Initialize the CaseInsensitiveComparer object.
            ObjectCompare = New CaseInsensitiveComparer()
        End Sub
    
        Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
            Dim compareResult As Integer
            Dim listviewX As ListViewItem
            Dim listviewY As ListViewItem
    
            ' Cast the objects to be compared to ListViewItem objects.
            listviewX = CType(x, ListViewItem)
            listviewY = CType(y, ListViewItem)
    
            ' Compare the two items.
            compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)
    
            ' Calculate the correct return value based on the object 
            ' comparison.
            If (OrderOfSort = SortOrder.Ascending) Then
                ' Ascending sort is selected, return typical result of 
                ' compare operation.
                Return compareResult
            ElseIf (OrderOfSort = SortOrder.Descending) Then
                ' Descending sort is selected, return negative result of 
                ' compare operation.
                Return (-compareResult)
            Else
                ' Return '0' to indicate that they are equal.
                Return 0
            End If
        End Function
    
        Public Property SortColumn() As Integer
            Set(ByVal Value As Integer)
                ColumnToSort = Value
            End Set
    
            Get
                Return ColumnToSort
            End Get
        End Property
    
        Public Property Order() As SortOrder
            Set(ByVal Value As SortOrder)
                OrderOfSort = Value
            End Set
    
            Get
                Return OrderOfSort
            End Get
        End Property
    End Class
    					
  9. Enregistrer, générer et exécuter l'exemple de projet.
  10. Cliquez sur les en-têtes de colonne différents dans le contrôle ListView. Lorsque vous cliquez sur l'en-tête, le contenu du contrôle ListView est trié dans l'ordre croissant, basé sur la colonne que vous cliquez sur. Lorsque vous cliquez de nouveau sur le même en-tête de colonne, cette colonne est triée par ordre décroissant.

Propriétés

Numéro d'article: 319399 - Dernière mise à jour: vendredi 11 mai 2007 - Version: 3.5
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Initiation
  • Microsoft Visual Basic .NET 2002 Initiation
Mots-clés : 
kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB319399 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 319399
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com