Você está offline; aguardando reconexão

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

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
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.
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)				
back to the top

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): Para obter mais informações sobre classes parciais e o Windows Forms Designer, visite o seguinte site da MSDN:
  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 = -2Next					
  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 IfElse    ' Set the column number that is to be sorted; default to ascending.    lvwColumnSorter.SortColumn = e.Column    lvwColumnSorter.Order = SortOrder.AscendingEnd 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.CollectionsImports System.Windows.FormsPublic 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 PropertyEnd 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.
back to the top

Warning: This article has been translated automatically

Propriedades

ID do Artigo: 319399 - Última Revisão: 05/11/2007 07:08:50 - Revisão: 3.5

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB319399 KbMtpt
Comentários
=">