Al momento sei offline in attesa che la connessione Internet venga ristabilita

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

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
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.
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)				
back to the top

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): Per ulteriori informazioni sulle classi parziali e Progettazione Windows Form, visitare il seguente sito MSDN Web:
  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 = -2Next					
  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 IfElse    ' Set the column number that is to be sorted; default to ascending.    lvwColumnSorter.SortColumn = e.Column    lvwColumnSorter.Order = SortOrder.AscendingEnd 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.CollectionsImports System.Windows.FormsPublic 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 PropertyEnd 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.
back to the top

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 319399 - Ultima revisione: 05/11/2007 07:08:50 - Revisione: 3.5

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB319399 KbMtit
Feedback
html>