当我们用ListView显示数据时,有一种很人性化的设计便是单击ListView某一列,该列则以升序或降序排列。
自己定义一个类继承自IComparer接口
代码如下:
classListViewSort:IComparer
{
privateintcol;
privatebooldescK;
publicListViewSort()
{
col =0;
}
publicListViewSort(intcolumn, objectDesc)
{
descK =(bool)Desc;
col =column; //当前列,0,1,2...,参数由ListView控件的ColumnClick事件传递 }
publicintCompare(objectx, objecty)
{
inttempInt =String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
if(descK) return-tempInt;
elsereturntempInt;
}
}
在ListView的ColumnClick事件中调用
代码如下
privatevoidlistView1_ColumnClick(objectsender, ColumnClickEventArgs e)
{
if(this.listView1.Columns[e.Column].Tag ==null)
this.listView1.Columns[e.Column].Tag =true;
boolflag =(bool)this.listView1.Columns[e.Column].Tag;
if(flag)
this.listView1.Columns[e.Column].Tag =false;
elsethis.listView1.Columns[e.Column].Tag =true;
this.listView1.ListViewItemSorter =newListViewSort(e.Column, this.listView1.Columns[e.Column].Tag);
this.listView1.Sort();//对列表进行自定义排序 }
最后要说一下,当我们调用ListView的Sort方法时,就会去隐式调用ListViewItemSorter属性对应的类实现的ComPare方法