Como ordenar um controlo de vista de lista numa coluna no Visual Basic .NET ou no Visual Basic 2005

Traduções de Artigos Traduções de Artigos
Artigo: 319399 - Ver produtos para os quais este artigo se aplica.
Para obter uma versão do Microsoft Visual C# .NET deste artigo, consulte 319401.
Para obter uma versão do Microsoft Visual Basic 6.0 deste artigo, consulte 170884.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo passo a passo descreve como ordenar um controlo de vista de lista numa coluna no Visual Basic .NET ou Visual Basic 2005 aplicação.

Quando estiver a trabalhar com o controlo de vista de lista, poderá ordenar o respectivo conteúdo com base numa coluna específica. Um exemplo deste tipo de funcionalidade ocorre no Explorador do Windows quando visualiza o conteúdo de uma pasta no disco rígido do programa. Na vista detalhes, O Explorador do Windows apresenta informações sobre os ficheiros nessa pasta. Por exemplo, verá o nome do ficheiro, o tamanho do ficheiro, o tipo de ficheiro e a data em que o ficheiro foi modificado. Quando clica dos cabeçalhos da coluna, a lista é ordenada por ordem, com base nessa coluna ascendente. Quando clica novamente o mesmo cabeçalho de coluna, a coluna é ordenada por ordem descendente.

O exemplo neste artigo define uma classe que implementa a interface IComparer. Além disso, este exemplo utiliza o método comparar da classe CaseInsenstiveComparer para efectuar a comparação real dos produtos. Tenha em atenção que este método de comparação não é sensível a maiúsculas e minúsculas ("Apple" é considerada igual a "maçãs"). Além disso, note que todas as colunas neste exemplo são ordenadas de forma de "texto". Se pretender ordenar de forma diferente (como, por exemplo, numericamente), pode substituir a seguinte linha de código qualquer que seja abordagem à ordenação que pretende utilizar:
compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)
				

Como criar o projecto de exemplo

  1. Crie um novo projecto de Visual Basic .NET ou Visual Basic 2005 Windows Application. Por predefinição, é criado o Form1.

    Nota Tem de alterar o código de Visual Basic 2005. Por predefinição, o Visual Basic cria dois ficheiros do projecto quando cria um projecto de Windows Forms. Se o formulário é o nome Form1, os dois ficheiros que representam o formulário são denominados Form1.VB e Form1.Designer.vb. Tem de escrever o código no ficheiro Form1.VB. O Windows Forms Designer escreve o código no ficheiro Form1.Designer.vb. O Windows Forms Designer utiliza a palavra-chave parcial para dividir a aplicação do Form1 em dois ficheiros separados. Este comportamento impede que o código gerado pelo estruturador a ser intercalados com o código.

    Para obter mais informações sobre novos melhoramentos de linguagem Visual Basic 2005, visite o seguinte Web 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 Web MSDN:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  2. Adicione um controlo de vista de lista ao Form1. Dimensione o formulário para ser várias polegadas de largura por várias cm de altura.
  3. Cole o seguinte código para a classe para o formulário:
    Private lvwColumnSorter As ListViewColumnSorter
    					
  4. Cole o código seguinte no construtor do formulário, após a chamada ao 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 seguinte código para o evento de carga 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 código seguinte no evento ColumnClick para a vista de lista:
    ' 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 projecto, clique em Adicionar classe para adicionar uma nova classe do projecto.
  8. Todo o código de predefinição da nova classe substituir 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. Guardar, criar e, em seguida, execute o projecto de exemplo.
  10. Clique em vários cabeçalhos de coluna no controlo ListView. Quando faz clique sobre o cabeçalho, o conteúdo do controlo ListView é ordenado por ordem ascendente, com base na coluna que clica. Quando clica novamente o mesmo cabeçalho de coluna, essa coluna é ordenada por ordem descendente.

Propriedades

Artigo: 319399 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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