c#listview排序

  ListView.Sort()方法的功能是“对列表视图的项进行排序”,可当您调用它时却什么也没有发生,原因是您没有为listView1.ListViewItemSorter指定排序器。所以,首先必须写一个排序类。 

public   class   mySorter:IComparer 



private   Comparer   comparer; 

private   int   sortColumn; 

private   SortOrder   sortOrder; 

public   mySorter() 



sortColumn=0; 

sortOrder=SortOrder.None; 

comparer=Comparer.Default; 



//指定进行排序的列 

public   int   SortColumn 



get   {return   sortColumn;} 

set   {sortColumn=value;} 



//指定按升序或降序进行排序 

public   SortOrder   SortOrder 



get   {return   sortOrder;} 

set   {sortOrder=value;} 



public   int   Compare(object   x,object   y) 



int   CompareResult; 

ListViewItem   itemX=(ListViewItem)x; 

ListViewItem   itemY=(ListViewItem)y; 

//在这里您可以提供自定义的排序 

CompareResult=comparer.Compare(itemX.SubItems[this.sortColumn].Text,itemY.SubItems[this.sortColumn].Text); 

if   (this.SortOrder==SortOrder.Ascending) 

return   CompareResult; 

else 

if   (this.SortOrder==SortOrder.Descending) 

return   (-CompareResult); 

else 

return   0; 





      

        如何使用这个类,很简单。新建一个Windows应用程序,加入ListView组件listView1并将其View属性设为Details。 

//加入排序类 

private   mySorter   sorter; 

//修改窗体构造函数 

public   Form1() 



InitializeComponent(); 

sorter=new   myColumnSorter(); 

//为ListViewItemSorter指定排序类 

this.listView1.ListViewItemSorter=sorter; 

sorter.SortOrder=SortOrder.Ascending; 



//给单击表头事件添加代码 

private   void   listView1_ColumnClick(object   sender,   System.Windows.Forms.ColumnClickEventArgs   e) 



if   (e.Column==this.sorter.SortColumn) 



if   (this.sorter.SortOrder==SortOrder.Ascending) 

this.sorter.SortOrder=SortOrder.Descending; 

else 

if   (this.sorter.SortOrder==SortOrder.Descending) 

this.sorter.SortOrder=SortOrder.Ascending; 

else 

return; 



else 



this.sorter.SortColumn=e.Column; 



this.listView1.Sort(); 



      如果您需要自定义排序,那么您可以修改排序器的Compare()方法。 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值