2011-11-28 27 views
5

WinForms .NET 2.0で特定の列番号でリストビューコントロールを並べ替える方法は?例えばインデックスが1の「行番号」という列があり、リストビューボックス内のアイテムを昇順で並べ替える必要があります。私は、多くのWinフォームプロジェクトでは、このコラムソーターを使用していたlistview C#特定の列でソートする

+0

がマイクロソフトからこの実装を参照してください:https://support.microsoft.com/en-us/kb/319401 – Mangesh

答えて

6

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;」を追加するだけです。あなたのプロジェクトでは、これはシンプルで動作し、基本的な昇順ソート –

関連する問題