在C#中,ListView控件提供了一種方便的方式來顯示和操作列表數據。要對ListView進行排序,你需要實現一個自定義的比較器(IComparer),然后將其分配給ListView的ListViewItemSorter屬性。以下是一個簡單的示例,展示了如何根據單擊的列對ListView進行排序:
using System.Collections;
public class ListViewItemComparer : IComparer
{
private int _columnToSort;
private SortOrder _sortOrder;
public ListViewItemComparer(int columnToSort, SortOrder sortOrder)
{
_columnToSort = columnToSort;
_sortOrder = sortOrder;
}
public int Compare(object x, object y)
{
ListViewItem itemX = (ListViewItem)x;
ListViewItem itemY = (ListViewItem)y;
string textX = itemX.SubItems[_columnToSort].Text;
string textY = itemY.SubItems[_columnToSort].Text;
int result;
if (_sortOrder == SortOrder.Ascending)
{
result = String.Compare(textX, textY);
}
else
{
result = String.Compare(textY, textX);
}
return result;
}
}
private void listView_ColumnClick(object sender, ColumnClickEventArgs e)
{
// 獲取當前排序狀態
SortOrder currentSortOrder = listView.Sorting;
// 切換排序順序
SortOrder newSortOrder = currentSortOrder == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending;
// 創建一個新的比較器并分配給ListView
ListViewItemComparer comparer = new ListViewItemComparer(e.Column, newSortOrder);
listView.ListViewItemSorter = comparer;
// 對ListView進行排序
listView.Sort();
}
listView.Sorting = SortOrder.None;
這樣,當用戶單擊ListView的列標題時,它將根據所選列進行升序或降序排序。你可以根據需要調整比較器類以支持更復雜的排序規則。