Modalità di ordinamento di un controllo ListView in base a una colonna in Visual C#

IMPORTANTE: il presente articolo è stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l’obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre è perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilità per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualità della traduzione.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 319401
Per la versione di Microsoft Visual Basic .NET di questo articolo, vedere 319399.

In questo articolo si intende lo spazio dei nomi di libreria di classi.NET Framework di Microsoft seguente:
  • System. Collections

IN QUESTA ATTIVITÀ

Sommario
In questo articolo viene descritto come ordinare una colonna in un'applicazione Visual C# di un controllo ListView .

Quando si lavora con il controllo ListView , si consiglia di ordinare il contenuto basato su una colonna specifica. Un esempio di questo tipo di funzionalità si verifica in un programma in Esplora risorse quando si visualizza il contenuto di una cartella sul disco rigido. Nella visualizzazione dettagli, in Esplora risorse Visualizza informazioni sui file in tale cartella. Ad esempio, vedere il nome del file, la dimensione del file, il tipo di file e la data in cui il file è stato modificato. Quando si fa clic su una delle intestazioni di colonna, l'elenco è ordinato in senso crescente in base a tale colonna. Quando si sceglie nuovamente la stessa intestazione di colonna, la colonna è ordinata in ordine decrescente.

Nell'esempio riportato in questo articolo viene definita una classe che eredita dall'interfaccia IComparer . Inoltre, in questo esempio viene utilizzato il metodo Compare della classe CaseInsenstiveComparer per eseguire il confronto effettivo degli elementi. Si noti che questo metodo di confronto non è tra maiuscole e minuscole ("Apple" viene considerato come "apple"). Si noti inoltre che tutte le colonne in questo esempio vengono ordinate in modo "testo". Se si desidera ordinare in modo differente (ad esempio numericamente), è possibile sostituire gli approcci all'ordinamento che si desidera utilizzare la seguente riga di codice:
ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text,listviewY.SubItems[ColumnToSort].Text);				
back to the top

Come compilare il progetto di esempio

  1. Creare un nuovo progetto applicazione Windows Visual C#. Per Default verrà creato Form1.
  2. Aggiungere un controllo ListView a Form1. Dimensiona la form in modo da essere più larga che alta.
  3. Incollare il codice seguente nella classe del form:
    private ListViewColumnSorter lvwColumnSorter;					
  4. Incollare il codice seguente nel costruttore del form, dopo la chiamata al metodo InitializeComponent :
    // Create an instance of a ListView column sorter and assign it // to the ListView control.lvwColumnSorter = new ListViewColumnSorter();this.listView1.ListViewItemSorter = lvwColumnSorter;					
  5. Incollare il codice seguente nell'evento Load del form:
    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;}					
    Nota Il codice deve essere modificato in Visual Studio 2005. Quando si crea un progetto Windows Form, Visual C# aggiunge un form al progetto per impostazione predefinita. Questo modulo è denominato Form1. I due file che rappresentano il form sono denominati Form1. cs e Form1. Designer.cs. Scrivere il codice in Form1. cs. Il file Designer.cs è in Progettazione Windows Form scrive il codice che implementa tutte le azioni eseguite mediante l'aggiunta di controlli. Per ulteriori informazioni su Progettazione Windows Form in Visual C# 2005, visitare il seguente sito Web Microsoft:
  6. Incollare il codice seguente nell'evento ColumnClick per il controllo 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. Dal menu progetto , fare clic su Aggiungi classe per aggiungere una nuova classe al progetto.
  8. Sostituire tutto il codice di default nella nuova classe con il seguente codice:
    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. Salvare, compilare ed eseguire il progetto di esempio.
  10. Fare clic su varie intestazioni di colonna nel controllo ListView . Quando si seleziona l'intestazione, il contenuto del controllo ListView vengono ordinato in ordine crescente in base alla colonna che si fa clic su. Quando si sceglie nuovamente la stessa intestazione di colonna, la colonna è ordinata in ordine decrescente.
back to the top
kbCtrl kbListView

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 319401 - Ultima revisione: 05/07/2016 09:38:00 - Revisione: 4.0

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

  • kbctrl kbhowtomaster kblistview kbmt KB319401 KbMtit
Feedback