ListView实现点击列排序

当我们用ListView显示数据时,有一种很人性化的设计便是单击ListView某一列,该列则以升序或降序排列。

  自己定义一个类继承自IComparer接口

  代码如下:

  

class ListViewSort:IComparer
{
private int col;
private bool descK;
public ListViewSort()
{
col
= 0;
}
public ListViewSort(int column, object Desc)
{
descK
= (bool)Desc;
col
= column; //当前列,0,1,2...,参数由ListView控件的ColumnClick事件传递
}
public int Compare(object x, object y)
{
int tempInt = String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
if (descK) return -tempInt;
else return tempInt;
}
}

在ListView的ColumnClick事件中调用

代码如下

 

private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
{
if (this.listView1.Columns[e.Column].Tag == null)
this.listView1.Columns[e.Column].Tag = true;
bool flag = (bool)this.listView1.Columns[e.Column].Tag;
if (flag)
this.listView1.Columns[e.Column].Tag = false;
else
this.listView1.Columns[e.Column].Tag = true;
this.listView1.ListViewItemSorter = new ListViewSort(e.Column, this.listView1.Columns[e.Column].Tag);
this.listView1.Sort();//对列表进行自定义排序
}

最后要说一下,当我们调用ListView的Sort方法时,就会去隐式调用ListViewItemSorter属性对应的类实现的ComPare方法

原文地址:https://www.cnblogs.com/ATually/p/1911344.html