vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - G?nnen Sie Ihrem SQL-Kommando diesen kr?nenden Abschlu?!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
Rubrik: Controls · ListView & TreeView   |   VB-Versionen: VB.NET26.09.07
ListView-Einträge nach Spalteninhalte sortieren (.NET)

Mit dem ListView lassen sich auf einfache weise Listen darstellen. Wie man dem Benutzer die Möglichkeit gibt, seine Dateien im ListView zu sortieren, zeigt das nachfolgende Beispiel.

Autor:   Lars KonschakBewertung:     [ Jetzt bewerten ]Views:  13.954 
ohne HomepageSystem:  WinNT, Win2k, WinXP, Vista, Win7, Win8 Beispielprojekt auf CD 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    Mit dem ListView lassen sich auf einfache weise Listen darstellen. Gerne wird dieses Control auch für den Nachbau einer Explorerfunktionalität verwendet. Zum Auswerten der angezeigten Liste verwendet der Benutzer unter anderem die Möglichkeit, die Einträge zu sortieren (z.B. nach Name, Datum ect.)

    Wie man dem Benutzer die Möglichkeit gibt, seine Dateien im ListView zu sortieren, zeigt das nachfolgende Beispiel.

    Das ListView besitzt die Eigenschaft "Sorting". Lautet diese "Ascending" oder "Decending" (Auf- bzw. Absteigend), so werden die hinzugefügten ListViewItems entsprechend sortiert im ListView eingefügt. In diesem Zustand werden aber die Einträge nur nach der ersten Spalte namentlich sortiert! Möchte man die Einträge nach den Inhalten weiterer Spalten sortieren, so muss ein Objekt mit einer imlementierenten ICompare Schnittstelle der ListViewItemSorter Eigenschaft übergeben werden.

    Es sei hier angemerkt, dass man beim Hinzufügen von weiteren ListViewItems die Sortierung aus Performancegründen deaktivieren sollte, und diese dann abschließend manuell mit der Sort-Methode auszuführen.

    In dem nun nachfolgendem Beispiel bauen wir einen kleinen Explorer nach, dessen Einträge nach Name, Größe und dem letzten Schreibzugriff sortiert werden können. Ein Auslösen der Sortierung erfolgt über das Anklicken der Columnheader.

    Den Klassen "SortByDate" und "SortBySize" wird die ICompare-Schnittstelle zugewiesen. Diese Klassen bestimmen die Sortierung.

    Für dieses Beispiel lesen wie alle Dateien aus dem Verzeichnis C:\Windows ein.

    Imports System.IO
     
    Public Class Form1
     
      ' Sortierreihenfolge (man kann natürlich hier auch seine 
      ' eigene Sortierdefnition verwenden)
      Private m_Sort As SortOrder = SortOrder.Descending
     
      Private WithEvents m_ltv As New ListView
      Private Sub Form1_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
     
        ' Formular anpassen
        Me.Width = 668
        Me.Height = 571
     
        ' ListView anpassen und 3 Columns hinzufügen
        With m_ltv
          .Width = 627
          .Height = 482
          .Dock = DockStyle.Fill
          .View = View.Details
          .Columns.Add("Name", 300, HorizontalAlignment.Left)
          .Columns.Add("Größe", 100, HorizontalAlignment.Left)
          .Columns.Add("Geändert am", 150, HorizontalAlignment.Left)
        End With
     
        ' Listview dem Formular hinzufügen
        Me.Controls.Add(m_ltv)
     
        ' Dateien in das Listview einlesen
        Call LoadFiles()
      End Sub
      Private Sub LoadFiles()
        Dim l As ListViewItem
     
        For Each f As FileInfo In New DirectoryInfo("C:\Windows").GetFiles
          l = m_ltv.Items.Add(f.Name)
          l.SubItems.Add(f.Length.ToString)
          l.SubItems.Add(f.LastWriteTime)
          l.Tag = f ' Wird später für die Sortierung benötigt
        Next 
      End Sub
      Private Sub m_ltv_ColumnClick(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.ColumnClickEventArgs) _
        Handles m_ltv.ColumnClick
     
        Select Case e.Column
          ' Nach Namen sortieren
          Case 0 
            ' Die erste Spalte beinhaltet bereits eine 
            ' "namentliche" Sortierung
            m_ltv.ListViewItemSorter = Nothing
            m_ltv.Sorting = m_Sort
     
          ' Nach der Größe sortieren
          Case 1 
            m_ltv.ListViewItemSorter = New SortBySize(m_Sort)
     
          ' Nach dem letztel Schreibzugriff sortieren
          Case 2 
            m_ltv.ListViewItemSorter = New SortByDate(m_Sort)
     
        End Select
     
        ' Sortierreihenfolge umkehren
        If m_Sort = SortOrder.Ascending Then
          m_Sort = SortOrder.Descending
        ElseIf m_Sort = SortOrder.Descending Then
          m_Sort = SortOrder.Ascending
        End If
      End Sub
      Public Class SortBySize
        Implements IComparer
        Private m_Sort As SortOrder = SortOrder.None
     
        Public Sub New(ByVal Sort As SortOrder)
          m_Sort = Sort ' Sortierreihenfolge
        End Sub
     
        Public Function Compare(ByVal x As Object, ByVal y As Object) _
          As Integer Implements System.Collections.IComparer.Compare
     
          ' Die in der Signatur angegebene Objekte x und y sind ListviewItems!!
     
          Dim lx As ListViewItem = CType(x, ListViewItem)
          Dim ly As ListViewItem = CType(y, ListViewItem)
     
          Dim x_size As Long = CType(lx.Tag, FileInfo).Length
          Dim y_size As Long = CType(ly.Tag, FileInfo).Length
     
          ' An dieser Stelle wird die Reihenfolge entschieden
          If m_Sort = SortOrder.Ascending Then
            Return x_size.CompareTo(y_size)
          Else
            Return -x_size.CompareTo(y_size)
          End If
        End Function
      End Class
      Public Class SortByDate
        Implements IComparer
        Private m_Sort As SortOrder = SortOrder.None
     
        Public Sub New(ByVal Sort As SortOrder)
          m_Sort = Sort ' Sortierreihenfolge
        End Sub
     
        Public Function Compare(ByVal x As Object, ByVal y As Object) _
          As Integer Implements System.Collections.IComparer.Compare
     
          ' Die in der Signatur angegebene Objekte x und y sind ListviewItems!!
     
          Dim lx As ListViewItem = CType(x, ListViewItem)
          Dim ly As ListViewItem = CType(y, ListViewItem)
     
          Dim x_date As Date = CType(lx.Tag, FileInfo).LastWriteTime
          Dim y_date As Date = CType(ly.Tag, FileInfo).LastWriteTime
     
          ' An dieser Stelle wird die Reihenfolge entschieden
          If m_Sort = SortOrder.Ascending Then
            Return x_date.CompareTo(y_date)
          Else
            Return -x_date.CompareTo(y_date)
          End If
        End Function
      End Class
    End Class

    Dieser Tipp wurde bereits 13.954 mal aufgerufen.

    Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

    Über diesen Tipp im Forum diskutieren
    Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

    Neue Diskussion eröffnen

    nach obenzurück


    Anzeige

    Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
    (einschl. Beispielprojekt!)

    Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
    - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
    - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
    Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
     
       

    Druckansicht Druckansicht Copyright ©2000-2015 vb@rchiv Dieter Otter
    Alle Rechte vorbehalten.

    Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

    Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel