2011-11-28 21 views
5

Jak sortować kontrolkę listview według określonego numeru kolumny w WinForms .NET 2.0? na przykład Mam kolumnę o nazwie "Numer linii", której indeks to 1, i chcę sortować moje pozycje w polu listy przez to w kolejności rosnącej.sortowanie listview Sortowanie według określonej kolumny

+0

Zobacz tę realizację od Microsoft: https://support.microsoft.com/en-us/kb/319401 – Mangesh

Odpowiedz

6

Użyłem tej kolumny sorter w wielu projektach 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(); 
} 

Źródło: Click Here

+0

zrobi. Dzięki. – david

14

Jest przykładem na MSDN ListView.ColumnClick article: bardzo krótka i prosta. Zasadniczo, można napisać ListViewItemComparer i używać go za każdym razem po kliknięciu kolumny:

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

Nie rozumiem, dlaczego to zostało zaznaczone. do szybkiego sortowania działa świetnie! Przełącza pomiędzy asc/desc, co jest dość łatwe do zrobienia! dzięki i tak! –

+0

Po prostu dodaj "using System.Collections;" na twoim projekcie i to jest proste i działa, dla podstawowego rodzaju ascend –

Powiązane problemy