Ordinare i dati in un controllo ListView

base utilizzando l' esempio precedente , vedremo come, Visual Basic. NET , ordinare i dati in lista per una delle sue colonne.

Il progetto , prima di aggiungere due pulsanti per selezionare quale è l'ordine desiderato. Come mostrato nella figura seguente:

Più tardi, il codice del modulo stesso creeremo due nuove classi (OrdenarPorNombre e ordine, per dimensioni), e gli eventi dei pulsanti che leccano impostare la proprietà listview ListViewItemSorter con una nuova istanza della classe corrispondente all'ordine selezionato. Il codice è breve, quindi non costano molte analisi. Poi lascio tutto il codice del modulo:

 Imports System.IO
 Public Class Form1

 Private Sub Form1_Load (ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles MyBase.Load
 Dim d Come New DirectoryInfo ("C: \ Windows")
 ListView1.View = View.Details
 ListView1.FullRowSelect = True

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

 For Each f Come FileInfo In d.GetFiles
 Dim elemento As New 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 (item)
 Prossimo
 ListView1.EndUpdate ()

 End Sub

 Privato Sub Button1_Click (ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles Button1.Click
 'Ordina per nome
 ListView1.ListViewItemSorter = New ordenarPorNombre
 End Sub

 Private Sub Button2_Click (ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles Button2.Click
 'Ordina per dimensione
 ListView1.ListViewItemSorter = New ordenarPorTamaño
 End Sub
 End Class

 Classe ordenarPorNombre
 Implementa IComparer
 Public Function Compare (ByVal x As Object, ByVal y As Object) _
 As Integer Implements System.Collections.IComparer.Compare
 Item1 As ListViewItem = CType (x, ListViewItem)
 Dim item2 As ListViewItem = CType (y, ListViewItem)
 Ritorno String.Compare (item1.Text, item2.Text)
 End Function
 End Class
 Classe ordenarPorTamaño
 Implementa IComparer

 Public Function Compare (ByVal x As Object, ByVal y As Object) _
 As Integer Implements System.Collections.IComparer.Compare
 Item1 As ListViewItem = CType (x, ListViewItem)
 Dim item2 As ListViewItem = CType (y, ListViewItem)
 Math.Sign Return (CLng (item1.SubItems (1) Testo) -.. CLng (item2.SubItems (1) Testo))
 End Function
 End Class

Come sempre, spero che il codice sarà utile.

11 Responses to "Ordinamento dei dati in un controllo ListView"

  1. Informazioni Bitacoras.com ...

    Rate in Bitacoras.com: utilizzando come base l'esempio precedente, vedremo come, Visual Basic Net ordinano i dati in lista per una qualsiasi delle sue colonne.. Il progetto precedente aggiungere due pulsanti per selezionare quale è l'ordine di .....

  2. Laura dice:

    Ok, bene, ma ... questo solo ordine crescente e per l'acquisto su e giù, dando il clic sulla colonna?

  3. Elisha ha detto:

    Ciao Laura:

    Per ordinare per nome in ordine decrescente basta invertire le variabili che vengono restituiti in classe OrdenarPorNombre ... Devi cambiare:
    Ritorno String.Compare (item1.Text, item2.Text)
    per questo:
    Ritorno String.Compare (item2.Text, item1.Text)

    e nel caso di ordine numerico deve invertire il segno restituito dal caso ordenarPorTamaño, cambiando questo:
    Math.Sign Return (CLng (item1.SubItems (1) Testo) -.. CLng (item2.SubItems (1) Testo))
    per questo:
    Ritorno Math.Sign () CLng (item1.SubItems (1) Testo.) - CLng (item2.SubItems. (1) Testo)) * -1)

    e, infine, vi dico che l'ordine dando Fai clic sulla colonna di ListView commentare qui perché voglio dedicare un articolo separato.

    Saluti, Eliseo

  4. Oscar ha detto:

    E come si ordina da tutto il campo in ordine decrescente Data data di creazione ad es.

    • Elisha ha detto:

      Aggiungere la seguente classe e assegnare al pulsante che si desidera.

      Classe ordenarPorFechaCreacion
      Implementa IComparer

      Public Function Compare (ByVal x As Object, ByVal y As Object) _
      As Integer Implements System.Collections.IComparer.Compare
      Item1 As ListViewItem = CType (x, ListViewItem)
      Dim item2 As ListViewItem = CType (y, ListViewItem)
      Ritorno Date.Compare (Date.parse (item1.SubItems (2). Text), Date.parse (item2.SubItems (2). Testo))
      End Function
      End Class

  5. Roxana ha detto:

    Ciao a tutti.
    in C # come sarebbe la condanna per lo stesso ordine?

  6. bebrafraptaug dice:

    dobry inizio

  7. Giosuè dice:

    nel caso in cui se ho un elenco in modo
    23 = 5 +5 +13
    5 = 1 +1 +1 +2
    4 = 3 +1
    etc .....
    Posso fare a mio modo di ordinare i numeri che se un risultato è che io non 231 = 100 +100 31 metterlo dopo il 23 5 +5 = 13

  8. Victor ha detto:

    Buon pomeriggio,

    Ci scusiamo per l'inconveniente, ma sapere come è possibile ordinare da due colonne in una sola volta? qualcosa di simile:
    XYZ
    ABA -> 1
    baa -> 2
    per b -> 3

    e la sinistra:

    XYZ
    per b -> 3
    ABA -> 1
    baa -> 2

    Super grata se potesse aiutarmi e se no, grazie per la pubblicazione delle stesse informazioni che è stato utile anche a me.

  9. Cinthia ha detto:

    E se volete fino ad oggi ..... che non sono solo per data di creazione

Commento