Classificar dados em um ListView

base usando o exemplo anterior , vamos ver como, visual basic. net , classificar os dados em listview por uma de suas colunas.

O projeto , antes de adicionar dois botões para selecionar qual é a ordem desejada. Como mostrado na figura abaixo:

Mais tarde no código mesma forma, vamos criar duas novas classes (OrdenarPorNombre e Ordem por tamanho), e os eventos dos botões lamber vamos definir o listview propriedade ListViewItemSorter com uma nova instância da classe correspondente à ordem selecionada. O código é curta, então não custa muita análise. Então eu deixo todo o código do formulário:

 Imports System.IO
 Public Class Form1

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

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

 Para cada f Como FileInfo Em d.GetFiles
 Item de Dim 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)
 Próximo
 ListView1.EndUpdate ()

 End Sub

 Private Sub Button1_Click (ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles Button1.Click
 "Ordenar por nome
 ListView1.ListViewItemSorter = New ordenarPorNombre
 End Sub

 Private Sub Button2_Click (ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles Button2.Click
 "Ordenar por tamanho
 ListView1.ListViewItemSorter = New ordenarPorTamaño
 End Sub
 End Class

 Classe ordenarPorNombre
 Implementa IComparer
 Função Pública Compare (ByVal x As Object, ByVal y As Object) _
 As Integer Implements System.Collections.IComparer.Compare
 Dim item1 Como ListViewItem = CType (x, ListViewItem)
 Item2 Dim ListViewItem = CType (y, ListViewItem)
 Voltar String.Compare (item1.Text, item2.Text)
 End Function
 End Class
 Classe ordenarPorTamaño
 Implementa IComparer

 Função Pública Compare (ByVal x As Object, ByVal y As Object) _
 As Integer Implements System.Collections.IComparer.Compare
 Dim item1 Como ListViewItem = CType (x, ListViewItem)
 Item2 Dim ListViewItem = CType (y, ListViewItem)
 Math.Sign Return (CLng (item1.SubItems (1) Texto) -.. CLng (item2.SubItems (1) Texto))
 End Function
 End Class

Como sempre, espero que o código vai ser útil.

11 Responses to "Classificando dados em um ListView"

  1. Informações Bitacoras.com ...

    Taxa em Bitacoras.com: usando como base o exemplo acima, vamos ver como, Visual Basic.NET classificar dados listview por qualquer de suas colunas.. O projeto anterior irá adicionar dois botões para selecionar qual é a ordem de .....

  2. Laura diz:

    Ok, tudo bem, mas ... isso? Apenas por ordem crescente e ordenar cima e para baixo, dando um clique sobre o cabeçalho da coluna

  3. Eliseu diz:

    Oi Laura:

    Para ordenar por nome em ordem decrescente basta inverter as variáveis ​​que são retornados na classe OrdenarPorNombre ... Você tem que mudar:
    Voltar String.Compare (item1.Text, item2.Text)
    para isso:
    Voltar String.Compare (item2.Text, item1.Text)

    e, no caso da ordem numérica deve inverter o sinal retornado pela caso ordenarPorTamaño, a alteração dessa:
    Math.Sign Return (CLng (item1.SubItems (1) Texto) -.. CLng (item2.SubItems (1) Texto))
    para isso:
    Voltar Math.Sign () CLng (item1.SubItems (1) Texto.) - CLng (item2.SubItems. (1) Texto)) * -1)

    e, finalmente, dizer-lhe que não a ordem dando Clique na coluna do listview comentar aqui porque eu quero dedicar um artigo separado.

    Saudações, Eliseu

  4. Oscar diz:

    E como fazer a encomenda por qualquer campo em ordem decrescente de data Data Criado por exemplo.

    • Eliseu diz:

      Adicione a seguinte classe e atribuí-lo ao botão que você deseja.

      Classe ordenarPorFechaCreacion
      Implementa IComparer

      Função Pública Compare (ByVal x As Object, ByVal y As Object) _
      As Integer Implements System.Collections.IComparer.Compare
      Dim item1 Como ListViewItem = CType (x, ListViewItem)
      Item2 Dim ListViewItem = CType (y, ListViewItem)
      Voltar Date.Compare (Date.parse (item1.SubItems (2). Text), Date.parse (item2.SubItems (2). Texto))
      End Function
      End Class

  5. Roxana diz:

    Olá pessoas.
    em C #, como seria a sentença para o fim mesmo?

  6. bebrafraptaug diz:

    dobry início

  7. Josué diz:

    no caso, se eu tenho uma lista tão
    23 = 5 +5 +13
    5 = 1 +1 +1 +2
    4 = 3 +1
    etc .....
    Eu posso fazer o que eu pedi-lo pelos números que se um resultado é que eu não 231 = 100 +100 31 colocá-lo depois do 23 = 5 +5 13

  8. Victor diz:

    Boa tarde,

    Desculpe o transtorno, mas vai saber como você pode classificar por duas colunas de uma só vez? algo como isto:
    XYZ
    aba -> 1
    baa -> 2
    de b -> 3

    e à esquerda:

    XYZ
    de b -> 3
    aba -> 1
    baa -> 2

    Super grata se você pudesse ajudar e se não, obrigado por postar a mesma informação que foi útil para mim também.

  9. Cinthia disse:

    E se você quer namorar ..... que não são apenas por data da criação

Comentar