C# ListView排序的實(shí)現(xiàn)方式

c#
小樊
83
2024-09-11 02:43:44
欄目: 編程語言

在C#中,ListView控件提供了一種簡(jiǎn)單的方法來對(duì)其列表項(xiàng)進(jìn)行排序

  1. 首先,為L(zhǎng)istView控件添加一個(gè)名為ColumnClick的事件處理程序。這將在用戶單擊列標(biāo)題時(shí)觸發(fā)。
private void listView_ColumnClick(object sender, ColumnClickEventArgs e)
{
    // 在此處添加排序代碼
}
  1. ColumnClick事件處理程序中,創(chuàng)建一個(gè)ListViewItemComparer類的實(shí)例,該類實(shí)現(xiàn)IComparer接口。這個(gè)類將用于比較兩個(gè)列表項(xiàng)并確定它們的順序。
public class ListViewItemComparer : IComparer
{
    private int _column;
    private SortOrder _sortOrder;

    public ListViewItemComparer(int column, SortOrder sortOrder)
    {
        _column = column;
        _sortOrder = sortOrder;
    }

    public int Compare(object x, object y)
    {
        ListViewItem itemX = (ListViewItem)x;
        ListViewItem itemY = (ListViewItem)y;

        int result = String.Compare(itemX.SubItems[_column].Text, itemY.SubItems[_column].Text);

        if (_sortOrder == SortOrder.Descending)
            result = -result;

        return result;
    }
}
  1. ColumnClick事件處理程序中,根據(jù)當(dāng)前列的索引和排序順序創(chuàng)建一個(gè)新的ListViewItemComparer實(shí)例。然后,使用Sort方法對(duì)ListView控件的列表項(xiàng)進(jìn)行排序。
private void listView_ColumnClick(object sender, ColumnClickEventArgs e)
{
    ListView listView = (ListView)sender;

    // 獲取當(dāng)前列的排序順序
    SortOrder sortOrder = SortOrder.Ascending;
    if (listView.Sorting == SortOrder.Ascending)
        sortOrder = SortOrder.Descending;

    // 創(chuàng)建一個(gè)新的ListViewItemComparer實(shí)例
    ListViewItemComparer comparer = new ListViewItemComparer(e.Column, sortOrder);

    // 對(duì)ListView控件的列表項(xiàng)進(jìn)行排序
    listView.ListViewItemSorter = comparer;
    listView.Sort();
}
  1. 最后,將listView_ColumnClick事件處理程序與ListView控件的ColumnClick事件關(guān)聯(lián)。
listView.ColumnClick += listView_ColumnClick;

現(xiàn)在,當(dāng)用戶單擊ListView控件的列標(biāo)題時(shí),列表項(xiàng)將按照所選列的值進(jìn)行升序或降序排序。

0