Come ordinare un controllo ListView in base a una colonna in Visual Basic .NET o in Visual Basic 2005

Traduzione articoli Traduzione articoli
Identificativo articolo: 319399 - Visualizza i prodotti a cui si riferisce l?articolo.
Per una versione di Microsoft Visual C# .NET di questo articolo, vedere 319401.
Per una versione di Microsoft Visual Basic 6.0 di questo articolo, vedere 170884.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo viene descritto come ordinare un controllo ListView in base a una colonna in Visual Basic .NET o un'applicazione Visual Basic 2005.

Quando si utilizza il controllo ListView, è possibile che si desideri ordinare il contenuto basato su una colonna specifica. Un esempio di questo tipo di funzionalità si verifica in Esplora risorse un programma quando si visualizza il contenuto di una cartella sul disco rigido. Nella visualizzazione dettagli, Esplora risorse consente di visualizzare informazioni sui file in tale cartella. Ad esempio, vedere il nome del file, la dimensione del file, il tipo di file e la data ultima modifica del file. Quando si fa clic su una delle intestazioni di colonna, l'elenco è ordinato in ordine crescente in base a tale colonna. Quando si fa nuovamente clic sull'intestazione di colonna stessa, la colonna è ordinata in ordine decrescente.

Nell'esempio riportato in questo articolo definisce una classe che implementa l'interfaccia IComparer. Inoltre, in questo esempio utilizza il metodo compare della classe CaseInsenstiveComparer eseguire effettivamente il confronto degli elementi. Si noti che questo metodo di confronto non viene fatta distinzione tra maiuscole e minuscole ("Apple" viene considerato come "mela"). Si noti inoltre che tutte le colonne in questo esempio sono ordinate in modo "text". Se si desidera ordinare in maniera diversa (ad esempio numericamente), è possibile sostituire la seguente riga di codice con qualsiasi altro approccio per l'ordinamento che si desidera utilizzare:
compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)
				

Creazione del progetto di esempio

  1. Creare un nuovo progetto applicazione Windows di Visual Basic 2005 o Visual Basic. NET. In base all'impostazione predefinita, viene creato il progetto Form1.

    Nota È necessario modificare il codice in Visual Basic 2005. Per impostazione predefinita, Visual Basic crea due file per il progetto quando si crea un progetto Windows Form. Se il form denominato Form1, i due file che rappresentano il form sono denominati Form1.vb e Form1.Designer.vb. È possibile scrivere il codice nel file Form1.vb. In Progettazione Windows Form scrive il codice nel file Form1.Designer.vb. In Progettazione Windows Form utilizza la parola chiave partial per suddividere l'implementazione di Form1 in due file distinti. Questo comportamento impedisce che il codice generato da progettazione venga frammisto con il codice.

    Per ulteriori informazioni sui nuovi miglioramenti del linguaggio Visual Basic 2005, visitare il seguente sito Web MSDN (informazioni in lingua INGLESE):
    http://msdn2.microsoft.com/en-us/library/ms379584(vs.80).aspx
    Per ulteriori informazioni sulle classi parziali e Progettazione Windows Form, visitare il seguente sito MSDN Web:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  2. Aggiungere un controllo ListView a Form1. Le dimensioni del modulo sia più cm di larghezza diversi cm di altezza.
  3. Incollare il codice riportato di seguito nella classe della maschera:
    Private lvwColumnSorter As ListViewColumnSorter
    					
  4. Incollare il codice riportato di seguito nel costruttore del form, dopo la chiamata al metodo InitializeComponent:
    ' Create an instance of a ListView column sorter and assign it 
    ' to the ListView control.
    lvwColumnSorter = New ListViewColumnSorter()
    Me.ListView1.ListViewItemSorter = lvwColumnSorter
    					
  5. Incollare il codice riportato di seguito nell'evento Load del form:
    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. Incollare il codice riportato di seguito nell'evento ColumnClick per 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. Dal menu progetto fare clic su Aggiungi classe per aggiungere una nuova classe al progetto.
  8. Sostituire tutto il codice predefinito nella nuova classe con il codice riportato di seguito:
    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. Salvare, generare ed eseguire quindi il progetto di esempio.
  10. Fare clic su varie intestazioni di colonna nel controllo ListView. Quando si seleziona l'intestazione, il contenuto del controllo ListView viene ordinato in ordine crescente in base alla colonna in cui si fa clic. Quando si fa nuovamente clic sull'intestazione di colonna stessa, tale colonna viene ordinata in ordine decrescente.

Proprietà

Identificativo articolo: 319399 - Ultima modifica: venerdì 11 maggio 2007 - Revisione: 3.5
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Chiavi: 
kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB319399 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 319399
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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