2011-11-28 22 views
5

Come ordinare un controllo listview mediante un numero di colonna specifico in WinForms .NET 2.0? per esempio. Ho una colonna chiamata "Numero di riga" il cui indice è 1, e voglio ordinare i miei elementi nella casella listview da quella in ordine crescente.listview C# ordinamento per colonna specifica

+0

Vai a questa implementazione di Microsoft: https://support.microsoft.com/en-us/kb/319401 – Mangesh

risposta

6

Ho usato questa colonna sorter in molti progetti Winform:

private void listView1_ColumnClick(object sender, 
        System.Windows.Forms.ColumnClickEventArgs e) 
{ 
    ListView myListView = (ListView)sender; 

    // 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. 
    myListView.Sort(); 
} 

Fonte: Click Here

+0

farà. Grazie. – david

14

C'è esempio su MSDN ListView.ColumnClick article: molto breve e semplice. In sostanza, si scrive un ListViewItemComparer e utilizzarlo ogni volta che si fa clic su una colonna:

class ListViewItemComparer : IComparer 
{ 
    private int col = 0; 

    public ListViewItemComparer(int column) 
    { 
     col = column; 
    } 
    public int Compare(object x, object y) 
    { 
     return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text); 
    } 
} 

class MyForm : Form 
{ 
    // private System.Windows.Forms.ListView listView1; 

    // ColumnClick event handler. 
    private void ColumnClick(object o, ColumnClickEventArgs e) 
    { 
     this.listView1.ListViewItemSorter = new ListViewItemComparer(e.Column); 
    } 
} 
+1

Non capisco perché questo era giù segnato. per un ordinamento rapido funziona alla grande! Passa da asc/desc a un livello abbastanza facile da fare! grazie comunque! –

+0

Basta aggiungere "using System.Collections;" sul tuo progetto e questo è semplice e funziona, per un ordinamento ascendente di base –

Problemi correlati