c#listview排序

来源:互联网 发布:大数据在生活中的应用 编辑:程序博客网 时间:2024/05/21 15:40
 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()方法。 
原创粉丝点击