Sortera data i en ListView

grund med hjälp av föregående exempel , kommer vi att se hur man, Visual Basic. NET , sortera data i listvy av en av hans kolumner.

Projektet innan du lägger två knapparna för att välja som är önskad ordning. Som framgår av bilden nedan:

Senare i samma form koden kommer vi att skapa två nya klasser OrdenarPorNombre och ordning efter storlek), och händelserna knappar slickar vi sätter listvy ListViewItemSorter fastigheten med en ny instans av den klass som motsvarar den valda ordningen. Koden är kort, så att inte kosta mycket analys. Sen lämnar jag all kod i formuläret:

 Import System.IO
 Allmän klass Formulär1

 Private Sub Form1_Load (ByVal avsändaren som System.Object, _
 ByVal e Såsom System.EventArgs) Handtag MyBase.Load
 Dim d As New DirectoryInfo ("C: \ Windows")
 ListView1.View = View.Details
 ListView1.FullRowSelect = Sant

 ListView1.BeginUpdate ()
 ListView1.Items.Clear ()

 För varje F Såsom FileInfo I d.GetFiles
 Dim objekt som ny ListViewItem (f.Name)

 item.SubItems.Add (f.length)
 item.SubItems.Add (f.CreationTime)
 item.SubItems.Add (f.LastWriteTime)
 item.SubItems.Add (f.LastAccessTime)

 ListView1.Items.Add (post)
 Nästa
 ListView1.EndUpdate ()

 End Sub

 Private Sub Button1_Click (ByVal avsändaren som System.Object, _
 ByVal E som System.EventArgs) Handtag Button1.Click
 "Sortera efter namn
 ListView1.ListViewItemSorter = Nytt ordenarPorNombre
 End Sub

 Private Sub Button2_Click (ByVal avsändaren som System.Object, _
 ByVal E som System.EventArgs) Handtag Button2.Click
 "Sortera efter storlek
 ListView1.ListViewItemSorter = Nytt ordenarPorTamaño
 End Sub
 Änden klass

 Klass ordenarPorNombre
 Implementerar IComparer
 Public function Jämför (ByVal x As Object, ByVal y As Object) _
 As Integer Redskap System.Collections.IComparer.Compare
 Dim Item1 Såsom ListViewItem = CType (x, ListViewItem)
 Dim item2 Såsom ListViewItem = CType (y, ListViewItem)
 Återgå String.Compare (item1.Text, item2.Text)
 Änden Funktion
 Änden klass
 Klass ordenarPorTamaño
 Implementerar IComparer

 Public function Jämför (ByVal x As Object, ByVal y As Object) _
 As Integer Redskap System.Collections.IComparer.Compare
 Dim Item1 Såsom ListViewItem = CType (x, ListViewItem)
 Dim item2 Såsom ListViewItem = CType (y, ListViewItem)
 Math.Sign Return (CLng (item1.SubItems (1) Text) -.. CLng (item2.SubItems (1) Text))
 Änden Funktion
 Änden klass

Som alltid hoppas jag att koden kommer vara användbar.

11 Responses to "Sortera data i ett ListView"

  1. Bitacoras.com säger:

    Informationen Bitacoras.com ...

    Takt Bitacoras.com: att använda som grund exemplet ovan kommer vi att se hur man, Visual Basic Net ListView sortera data genom någon av sina kolumner.. Det tidigare projektet kommer att lägga två knappar för att välja vilken är den ordning .....

  2. Laura säger:

    Ok, fint, men ... det bara stigande ordning och beställa upp och ner, vilket ger Klicka på kolumnhuvudet?

  3. Elisha säger:

    Hi Laura:

    För att beställa med namn i fallande bara att vända de variabler som returneras i klassen OrdenarPorNombre ... Du måste ändra:
    Återgå String.Compare (item1.Text, item2.Text)
    för detta:
    Återgå String.Compare (item2.Text, item1.Text)

    och i fallet med numeriska ordningen måste vända tecken som returneras av ordenarPorTamaño fallet förändras Detta:
    Math.Sign Return (CLng (item1.SubItems (1) Text) -.. CLng (item2.SubItems (1) Text))
    för detta:
    Återgå Math.Sign () CLng (item1.SubItems (1) Text.) - CLng (. Item2.SubItems (1) Text)) * -1)

    och slutligen säga att ordern ger Klicka på kolumnen för listvy inte kommentera här, eftersom jag vill ägna en separat artikel.

    Hälsningar, Elisha

  4. Oscar säger:

    Och som du beställer från ett fält i fallande datum Skapad t. ex.

    • Elisha säger:

      Lägg till följande klass och tilldela den till knappen som du vill.

      Klass ordenarPorFechaCreacion
      Implementerar IComparer

      Public function Jämför (ByVal x As Object, ByVal y As Object) _
      As Integer Redskap System.Collections.IComparer.Compare
      Dim Item1 Såsom ListViewItem = CType (x, ListViewItem)
      Dim item2 Såsom ListViewItem = CType (y, ListViewItem)
      Återgå Date.Compare (Date.parse (item1.SubItems (2). Text), Date.parse (item2.SubItems (2). Text))
      Änden Funktion
      Änden klass

  5. Roxana säger:

    Hej människor.
    i C # som skulle vara straff för samma ordning?

  6. bebrafraptaug säger:

    dobry början

  7. Joshua säger:

    i fallet om jag har en lista så
    23 = 5 +5 +13
    5 = 1 +1 +1 +2
    4 = 3 +1
    etc .....
    Jag kan göra som jag beställa det genom att de nummer som om ett resultat är jag 231 = 100 100 31 inte sätta den efter 23 = 5 +5 13

  8. Victor säger:

    God eftermiddag,

    Ledsen för besväret, men kommer veta hur du kan sortera efter två kolumner på en gång? ungefär så här:
    XYZ
    ABA -> 1
    baa -> 2
    till B -> 3

    och lämnade:

    XYZ
    till B -> 3
    ABA -> 1
    baa -> 2

    Super tacksam om ni kunde hjälpa, och om inte, tack för att lägga samma information som var användbar för mig också.

  9. Cinthia sade:

    Och om du vill hittills ..... som inte bara efter datum för skapande

Kommentar