Como classificar um controle ListView por uma coluna em translation from VPE for Csharp Visual

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: 319401
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 319399.

Este artigo se refere ao seguinte namespace Microsoft .NET Framework Class Library:
  • System.Collections

NESTA TAREFA

Sumário
Este artigo passo a passo descreve como classificar um controle ListView por uma coluna em seu aplicativo translation from VPE for Csharp Visual.

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 programa do Windows Explorer quando você exibir o conteúdo de uma pasta em seu disco rígido. No modo de exibição detalhes, o Windows Explorer exibe informações sobre 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 com base em que a coluna crescente. Quando você clicar no cabeçalho da coluna mesmo novamente, a coluna está classificada em ordem decrescente.

O exemplo neste artigo define uma classe que herda da interface IComparer . Além disso, este exemplo usa o método Compare da classe CaseInsenstiveComparer 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" é considerada a mesma "maçã"). Além disso, observe que todas as colunas neste exemplo são classificadas em uma forma de "text". Se você deseja classificar de maneira diferente (como numericamente), você pode substituir a linha de código a seguir com qualquer abordagem para a classificação que você deseja usar:
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 de aplicativo Windows translation from VPE for Csharp Visual. O Form1 é criado por padrão.
  2. Adicione um controle ListView ao Form1. Dimensione o formulário para ser vários polegadas de largura por vários cm de altura.
  3. Cole o seguinte código na classe para o formulário:
    private ListViewColumnSorter lvwColumnSorter;					
  4. Cole o seguinte código para o construtor do formulário, após a chamada para o método InitializeComponent :
    // Create an instance of a ListView column sorter and assign it // to the ListView control.lvwColumnSorter = new ListViewColumnSorter();this.listView1.ListViewItemSorter = lvwColumnSorter;					
  5. Cole o código abaixo o evento Load do formulário:
    ColumnHeader columnheader;		// Used for creating column headers.ListViewItem listviewitem;		// Used for creating listview items.// Ensure 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("John");listviewitem.SubItems.Add("Smith");this.listView1.Items.Add(listviewitem);listviewitem = new ListViewItem("Bob");listviewitem.SubItems.Add("Taylor");this.listView1.Items.Add(listviewitem);listviewitem = new ListViewItem("Kim");listviewitem.SubItems.Add("Zimmerman");this.listView1.Items.Add(listviewitem);listviewitem = new ListViewItem("Olivia");listviewitem.SubItems.Add("Johnson");this.listView1.Items.Add(listviewitem);			            // Create some column headers for the data. columnheader = new ColumnHeader();columnheader.Text = "First Name";this.listView1.Columns.Add(columnheader);columnheader = new ColumnHeader();columnheader.Text = "Last Name";this.listView1.Columns.Add(columnheader);// Loop through and size each column header to fit the column header text.foreach (ColumnHeader ch in this.listView1.Columns){				ch.Width = -2;}					
    Observação O código deve ser alterado no Visual Studio 2005. Quando você cria um projeto Windows Forms, translation from VPE for Csharp Visual adiciona um formulário para o projeto por padrão. Este formulário é denominado Form1. Os dois arquivos que representam o formulário são denominados Form1.cs e Form1.Designer.cs. Tem de escrever seu código no Form1.cs. O ficheiro Designer.cs é onde o Windows Forms Designer escreve o código que implementa todas as ações que você executou adicionando controles. Para obter mais informações sobre o Windows Forms Designer no Visual translation from VPE for Csharp 2005, visite o seguinte site:
  6. Cole o seguinte código no evento de ColumnClick para o controle ListView :
    // Determine if clicked column is already the column that is being sorted.if ( e.Column == lvwColumnSorter.SortColumn ){	// Reverse the current sort direction for this column.	if (lvwColumnSorter.Order == SortOrder.Ascending)	{		lvwColumnSorter.Order = SortOrder.Descending;	}	else	{		lvwColumnSorter.Order = SortOrder.Ascending;	}}else{	// Set the column number that is to be sorted; default to ascending.	lvwColumnSorter.SortColumn = e.Column;	lvwColumnSorter.Order = SortOrder.Ascending;}// Perform the sort with these new sort options.this.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:
    using System.Collections;	using System.Windows.Forms;/// <summary>/// This class is an implementation of the 'IComparer' interface./// </summary>public class ListViewColumnSorter : IComparer{	/// <summary>	/// Specifies the column to be sorted	/// </summary>	private int ColumnToSort;	/// <summary>	/// Specifies the order in which to sort (i.e. 'Ascending').	/// </summary>	private SortOrder OrderOfSort;	/// <summary>	/// Case insensitive comparer object	/// </summary>	private CaseInsensitiveComparer ObjectCompare;	/// <summary>	/// Class constructor.  Initializes various elements	/// </summary>	public ListViewColumnSorter()	{		// Initialize the column to '0'		ColumnToSort = 0;		// Initialize the sort order to 'none'		OrderOfSort = SortOrder.None;		// Initialize the CaseInsensitiveComparer object		ObjectCompare = new CaseInsensitiveComparer();	}	/// <summary>	/// This method is inherited from the IComparer interface.  It compares the two objects passed using a case insensitive comparison.	/// </summary>	/// <param name="x">First object to be compared</param>	/// <param name="y">Second object to be compared</param>	/// <returns>The result of the comparison. "0" if equal, negative if 'x' is less than 'y' and positive if 'x' is greater than 'y'</returns>	public int Compare(object x, object y)	{		int compareResult;		ListViewItem listviewX, listviewY;		// Cast the objects to be compared to ListViewItem objects		listviewX = (ListViewItem)x;		listviewY = (ListViewItem)y;		// Compare the two items		compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text,listviewY.SubItems[ColumnToSort].Text);					// Calculate correct return value based on object comparison		if (OrderOfSort == SortOrder.Ascending)		{			// Ascending sort is selected, return normal result of compare operation			return compareResult;		}		else if (OrderOfSort == SortOrder.Descending)		{			// Descending sort is selected, return negative result of compare operation			return (-compareResult);		}		else		{			// Return '0' to indicate they are equal			return 0;		}	}    	/// <summary>	/// Gets or sets the number of the column to which to apply the sorting operation (Defaults to '0').	/// </summary>	public int SortColumn	{		set		{			ColumnToSort = value;		}		get		{			return ColumnToSort;		}	}	/// <summary>	/// Gets or sets the order of sorting to apply (for example, 'Ascending' or 'Descending').	/// </summary>	public SortOrder Order	{		set		{			OrderOfSort = value;		}		get		{			return OrderOfSort;		}	}    }					
  9. Salvar, criar e executar o projeto de exemplo.
  10. Clique nos vários cabeçalhos de coluna no controle ListView . Quando você clicar em cabeçalho, o conteúdo do controle ListView é classificado em ordem crescente com base na coluna que você clique em. Quando você clicar no cabeçalho da coluna mesmo novamente, essa coluna é classificada em ordem decrescente.
back to the top
kbCtrl kbListView

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 319401 - Última Revisão: 03/13/2008 18:56:42 - Revisão: 3.1

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# 2005 Express Edition, Microsoft Visual C# 2008 Express Edition

  • kbmt kbctrl kbhowtomaster kblistview KB319401 KbMtpt
Comentários