2011-11-28 161 views
5

Cách sắp xếp điều khiển danh sách theo một số cột cụ thể trong WinForms .NET 2.0? ví dụ. Tôi có một cột được gọi là "Số dòng" có chỉ mục là 1 và tôi muốn sắp xếp các mục của tôi trong hộp danh sách theo thứ tự tăng dần.listview C# sắp xếp theo cột cụ thể

+0

Xem thực hiện điều này từ Microsoft: https://support.microsoft.com/en-us/kb/319401 – Mangesh

Trả lời

6

Tôi đã sử dụng cột sorter này trong nhiều dự án 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(); 
} 

Nguồn: Click Here

+0

sẽ làm. Cảm ơn. – david

14

Có ví dụ trên MSDN ListView.ColumnClick article: rất ngắn và đơn giản. Về cơ bản, bạn viết một ListViewItemComparer và sử dụng nó mỗi khi bạn nhấp vào một cột:

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

Không hiểu tại sao điều này lại bị đánh dấu. để phân loại nhanh nó hoạt động tuyệt vời! Có chuyển đổi giữa asc/desc thats dễ dàng, đủ để làm! dù sao cũng cảm ơn bạn! –

+0

Chỉ cần thêm "using System.Collections;" về dự án của bạn và điều này là đơn giản và nó hoạt động, cho một sắp xếp cơ bản –

Các vấn đề liên quan