Gewusst wie: Sortieren ein ListView-Steuerelements nach einer Spalte in Visual Basic .NET oder Visual Basic 2005

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 319399 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Eine Microsoft Visual C# .NET Version dieses Artikels finden Sie unter 319401.
Eine Microsoft Visual Basic 6.0-Version dieses Artikels finden Sie unter 170884.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt die Vorgehensweise zum Sortieren eines ListView -Steuerelements nach einer Spalte in Ihrem Visual Basic .NET oder Visual Basic 2005-Anwendung.

Bei der Arbeit mit dem ListView -Steuerelement sollten Sie seinen Inhalt basierend auf einer bestimmten Spalte sortiert. Ein Beispiel für diese Art von Funktionalität tritt in einem Windows Explorer-Programm, wenn Sie den Inhalt eines Ordners auf Ihrer Festplatte anzeigen. In der Detailansicht zeigt Windows Explorer Informationen über die Dateien in diesem Ordner. Sie sehen z. B. den Dateinamen, die Dateigröße, den Dateityp und das Datum, an dem die Datei geändert wurde. Wenn Sie auf eine der Spaltenüberschriften klicken, wird die Liste in aufsteigender Reihenfolge, basierend auf dieser Spalte sortiert. Wenn Sie erneut auf dieselbe Spaltenüberschrift klicken, wird die Spalte in absteigender Reihenfolge sortiert.

Das Beispiel in diesem Artikel definiert eine Klasse, die die IComparer -Schnittstelle implementiert. Dieses Beispiel verwendet darüber hinaus die Compare -Methode der Klasse CaseInsenstiveComparer den tatsächlichen Vergleich der Elemente ausführen. Beachten Sie, dass bei dieser Vergleichsmethode die Groß-/Kleinschreibung nicht beachtet wird ("Apple" gilt als das gleiche wie "apple"). Beachten Sie, dass alle Spalten in diesem Beispiel wird in einer Weise "Text" sortiert werden. Wenn Sie auf unterschiedliche Weise sortieren möchten (z. B. numerisch), können Sie die folgende Codezeile ersetzen Sie durch Ansatz zu sortieren, die Sie verwenden möchten:
compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)
				

Das Beispielprojekt erstellen

  1. Erstellen Sie ein neues Visual Basic .NET oder Visual Basic 2005-Windows-Anwendung-Projekt.Form1 wird standardmäßig erstellt.

    Hinweis Ändern Sie den Code in Visual Basic 2005. Standardmäßig erstellt Visual Basic zwei Dateien für das Projekt, wenn Sie ein Windows Forms-Projekt erstellen. Wenn das Formular Form1 benannt ist, werden die beiden Dateien, die das Formular darstellen Form1.vb und Form1.Designer.vb genannt. Schreiben Sie den Code in der Datei Form1.vb. Windows Forms-Designer schreibt den Code in der Datei Form1.Designer.vb. Windows Forms-Designer verwendet das partial-Schlüsselwort, um die Implementierung von Form1 in zwei separate Dateien aufzuteilen. Dieses Verhalten verhindert, dass den vom Designer generierten Code mit Code kombiniert wird.

    Weitere Informationen über die neuen Spracherweiterungen in Visual Basic 2005 finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:
    http://msdn2.Microsoft.com/en-us/library/ms379584 (vs.80).aspx
    Weitere Informationen zu partiellen Klassen und Windows Forms-Designer finden Sie auf der folgenden MSDN-Website:
    http://msdn2.Microsoft.com/en-us/library/ms171843.aspx
  2. Fügen Sie ein ListView -Steuerelement zu Form1 hinzu. Skalieren Sie das Formular, um mehrere cm Breite Byseveral cm hoch sein.
  3. Fügen Sie den folgenden Code in die Klasse für das Formular:
    Private lvwColumnSorter As ListViewColumnSorter
    					
  4. Fügen Sie folgenden Code in den Konstruktor des Formulars nach dem Aufruf von InitializeComponent -Methode:
    ' Create an instance of a ListView column sorter and assign it 
    ' to the ListView control.
    lvwColumnSorter = New ListViewColumnSorter()
    Me.ListView1.ListViewItemSorter = lvwColumnSorter
    					
  5. Fügen Sie den folgenden Code in das Load -Ereignis des Formulars ein:
    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. Fügen Sie den folgenden Code in das ColumnClick -Ereignis für die Listenansicht:
    ' 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. Klicken Sie im Menü Projekt auf Klasse hinzufügen , um dem Projekt eine neue Klasse hinzufügen.
  8. Ersetzen Sie den Standardcode in der neuen Klasse aller mit folgende Code:
    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. Speichern Sie und führen Sie dann das Beispielprojekt erstellen.
  10. Klicken Sie auf die verschiedenen Spaltenüberschriften im ListView -Steuerelement. Wenn Sie die Kopfzeile klicken, wird der Inhalt des ListView -Steuerelements in aufsteigender Reihenfolge, basierend auf der Spalte bist du auf sortiert. Wenn Sie erneut auf dieselbe Spaltenüberschrift klicken, wird die Spalte Sortedin in absteigender Reihenfolge.

Eigenschaften

Artikel-ID: 319399 - Geändert am: Donnerstag, 31. Oktober 2013 - Version: 7.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB319399 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell übersetzt und wird dann möglicherweise mithilfe des Community Translation Framework (CTF) von Mitgliedern unserer Microsoft Community nachbearbeitet. Weitere Informationen zu CTF finden Sie unter http://support.microsoft.com/gp/machine-translation-corrections/de.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 319399
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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