Como ordenar um controlo de vista de lista numa coluna no Visual Basic .NET ou no 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 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
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.
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)				
back to the top

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): Para obter mais informações sobre classes parciais e o Windows Forms Designer, visite o seguinte site da Web MSDN:
  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 = -2Next					
  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 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 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.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. 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.
back to the top

Aviso: Este artigo foi traduzido automaticamente

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