如何对ListView的项进行排序
当您使用资源浏览器查看文件时,您可以随心所欲的按名称、大小、类型及修改日期不同的列对文件进行大小排序。.Net提供的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()方法。 
|