Como classificar um controle ListView por uma coluna no Visual Basic .NET ou Visual Basic 2005

Traduções deste artigo Traduções deste artigo
ID do artigo: 319399 - Exibir os produtos aos quais esse artigo se aplica.
Para obter uma versão do Microsoft Visual translation from VPE for Csharp .NET deste artigo, consulte 319401.
Para uma versão deste artigo do Microsoft Visual Basic 6.0, consulte 170884.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo passo a passo descreve como classificar um controle ListView por uma coluna em seu aplicativo Visual Basic 2005 ou Visual Basic. NET.

Quando você estiver trabalhando com o controle ListView, talvez queira classificar seu conteúdo com base em uma coluna específica. Um exemplo desse tipo de funcionalidade ocorre em um Windows Explorer quando você exibe o conteúdo de uma pasta no disco rígido de programa. Em Exibir detalhes, Windows Explorer exibe informações sobre os arquivos nessa pasta. Por exemplo, você verá o nome do arquivo, o tamanho do arquivo, o tipo de arquivo e a data em que o arquivo foi modificado. Quando você clica em um dos cabeçalhos de coluna, a lista é classificada em ordem crescente com base na coluna. Quando você clicar no cabeçalho da mesma coluna novamente, a coluna está classificada em ordem decrescente.

O exemplo neste artigo define uma classe que implementa a interface IComparer. Além disso, este exemplo usa o método da classe CaseInsenstiveComparerComparar para executar a comparação real dos itens. Observe que esse método de comparação não diferencia maiúsculas de minúsculas ("Apple" é considerado o mesmo que "apple"). Além disso, observe que todas as colunas neste exemplo são classificadas de maneira "text". Se você deseja classificar de maneira diferente (como numericamente), você pode substituir a linha de código a seguir por qualquer abordagem para a classificação que você deseja usar:
compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)
				

Como criar o projeto de exemplo

  1. Crie um novo projeto Visual Basic.NET ou Visual Basic 2005 Windows Application. O Form1 é criado por padrão.

    Observação: Você deve alterar o código do Visual Basic 2005. Por padrão, o Visual Basic cria dois arquivos para o projeto ao criar um projeto Windows Forms. Se o formulário é denominado Form1, os dois arquivos representam o formulário são chamados de Form1.vb e Form1.Designer.vb. Escrever o código no arquivo Form1.vb. O Windows Forms Designer escreve o código no arquivo Form1.Designer.vb. O Windows Forms Designer usa a palavra-chave partial para dividir a implementação de Form1 em dois arquivos separados. Esse comportamento impede que o código gerado pelo designer sendo intercalados com o seu código.

    Para obter mais informações sobre os novos aprimoramentos de linguagem do Visual Basic 2005, visite o seguinte site da Microsoft Developer Network (MSDN):
    http://msdn2.microsoft.com/en-us/library/ms379584(vs.80).aspx
    Para obter mais informações sobre classes parciais e o Windows Forms Designer, visite o seguinte site da MSDN:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  2. Adicione um controle ListView ao Form1. Dimensione o formulário seja várias polegadas de largura por vários centímetros de altura.
  3. Cole o seguinte código à classe do formulário:
    Private lvwColumnSorter As ListViewColumnSorter
    					
  4. Cole o seguinte código para o construtor do formulário, após a chamada do método InitializeComponent:
    ' Create an instance of a ListView column sorter and assign it 
    ' to the ListView control.
    lvwColumnSorter = New ListViewColumnSorter()
    Me.ListView1.ListViewItemSorter = lvwColumnSorter
    					
  5. Cole o código a seguir no evento Load do formulário:
    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. Cole o seguinte código no evento de ColumnClick de ListView:
    ' 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. No menu Project, clique em Add Class para adicionar uma nova classe para o projeto.
  8. Substituir todo o código padrão na nova classe com o seguinte código:
    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. Salvar, criar e executar o projeto de amostra.
  10. Clique em vários cabeçalhos das colunas no controle ListView. Quando você clicar no cabeçalho, o conteúdo do controle ListView é classificado em ordem crescente com base na coluna que você clicar. Quando você clicar no cabeçalho da mesma coluna novamente, essa coluna é classificada em ordem decrescente.

Propriedades

ID do artigo: 319399 - Última revisão: sexta-feira, 11 de maio de 2007 - Revisão: 3.5
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Palavras-chave: 
kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB319399 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 319399

Submeter comentários

 

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