2011-11-28 3 views
5

Как отсортировать элемент управления listview с помощью определенного номера столбца в WinForms .NET 2.0? например У меня есть столбец с именем «Номер строки», индекс которого равен 1, и я хочу сортировать свои объекты в окне списка по порядку в порядке возрастания.listview C# сортировка по определенному столбцу

+0

Смотрите эту реализацию от Microsoft: https://support.microsoft.com/en-us/kb/319401 – Mangesh

ответ

6

Я использовал этот столбец сортировки во многих 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(); 
} 

Источник: Click Here

+0

будет делать. Благодарю. – david

14

Существует пример на MSDN ListView.ColumnClick article: очень короткий и простой. По сути, вы пишете ListViewItemComparer и использовать его каждый раз, когда вы щелкните столбец:

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

Не поймите, почему это было отмечено. для быстрой сортировки он отлично работает! Переключение между asc/desc достаточно просто! Спасибо, в любом случае! –

+0

Просто добавьте «using System.Collections;» на ваш проект, и это просто, и это работает, для базовой сортировки –

Смежные вопросы