在C#中,ListView控件提供了一種簡(jiǎn)單的方法來對(duì)其列表項(xiàng)進(jìn)行排序
ColumnClick
的事件處理程序。這將在用戶單擊列標(biāo)題時(shí)觸發(fā)。private void listView_ColumnClick(object sender, ColumnClickEventArgs e)
{
// 在此處添加排序代碼
}
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;
}
}
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();
}
listView_ColumnClick
事件處理程序與ListView控件的ColumnClick
事件關(guān)聯(lián)。listView.ColumnClick += listView_ColumnClick;
現(xiàn)在,當(dāng)用戶單擊ListView控件的列標(biāo)題時(shí),列表項(xiàng)將按照所選列的值進(jìn)行升序或降序排序。