您好,登錄后才能下訂單哦!
在WinForms中,ListView控件支持多列排序
using System.Windows.Forms;
using System.Collections;
public class MultiColumnSortableListView : ListView
{
private ArrayList _columnSorters;
public MultiColumnSortableListView()
{
_columnSorters = new ArrayList();
}
// ... 其他代碼
}
public void AddColumnSorter(int columnIndex, IComparer comparer)
{
if (_columnSorters.Count <= columnIndex)
{
_columnSorters.Capacity = columnIndex + 1;
}
_columnSorters[columnIndex] = comparer;
}
public override IComparer ListViewItemSorter
{
get
{
return new MultiColumnComparer(_columnSorters);
}
set
{
base.ListViewItemSorter = value;
}
}
internal class MultiColumnComparer : IComparer
{
private ArrayList _columnSorters;
public MultiColumnComparer(ArrayList columnSorters)
{
_columnSorters = columnSorters;
}
public int Compare(object x, object y)
{
ListViewItem itemX = (ListViewItem)x;
ListViewItem itemY = (ListViewItem)y;
for (int i = 0; i < _columnSorters.Count; i++)
{
IComparer comparer = (IComparer)_columnSorters[i];
if (comparer != null)
{
int result = comparer.Compare(itemX.SubItems[i].Text, itemY.SubItems[i].Text);
if (result != 0)
{
return result;
}
}
}
return 0;
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 添加列比較器
multiColumnSortableListView1.AddColumnSorter(0, StringComparer.CurrentCulture);
multiColumnSortableListView1.AddColumnSorter(1, new NumericComparer());
}
}
private void multiColumnSortableListView1_ColumnClick(object sender, ColumnClickEventArgs e)
{
multiColumnSortableListView1.Sorting = multiColumnSortableListView1.Sorting == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending;
multiColumnSortableListView1.Sort();
}
現(xiàn)在,當用戶單擊列標題時,ListView控件將根據(jù)添加的多列比較器進行排序。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。