【解决方法】:使用IComparer接口。
例子:1.using System;using System.Collections.Generic;using System.Text;using System.Collections;using System.Windows.Forms;namespacesortListView{ classListViewColumnSorter: IComparer{ private int ColumnToSort;//指定按照哪个列排序 private SortOrder OrderOfSort;//指定排序的方式 private CaseInsensitiveComparerObjectCompare;//声明CaseInsensitiveComparer类对象, public ListViewColumnSorter()//构造函数
![C#中listview实现排序 c listview 排序](http://img.aihuau.com/images/01111101/01064332t01aeaa3ae48e5fc7f3.png)
{ ColumnToSort = 0;//默认按第一列排序 OrderOfSort =SortOrder.None;//排序方式为不排序 ObjectCompare = newCaseInsensitiveComparer();//初始化CaseInsensitiveComparer类对象 } //重写IComparer接口. //<returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns> public int Compare(object x, object y) { int compareResult; ListViewItem listviewX, listviewY; //将比较对象转换为ListViewItem对象 listviewX = (ListViewItem)x; listviewY = (ListViewItem)y; // 比较 compareResult =ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text,listviewY.SubItems[ColumnToSort].Text); //根据上面的比较结果返回正确的比较结果 if (OrderOfSort ==SortOrder.Ascending) {//因为是正序排序,所以直接返回结果 returncompareResult; } else if (OrderOfSort ==SortOrder.Descending) {//如果是反序排序,所以要取负值再返回 return(-compareResult); } else { //如果相等返回0 return 0; } } ///获取或设置按照哪一列排序. public int SortColumn { set { ColumnToSort =value; } get { return ColumnToSort; } } ///获取或设置排序方式. public SortOrder Order { set { OrderOfSort = value; } get { return OrderOfSort; } } }}================================namespace sortListView{ public partial class Form1 : Form { public Form1() { InitializeComponent(); //创建一个ListView排序类的对象,并设置listView1的排序器 lvwColumnSorter = newListViewColumnSorter(); this.listView1.ListViewItemSorter =lvwColumnSorter; } private voidForm1_Load(object sender, EventArgs e) {初始化listview1. } private voidlistView1_ColumnClick(object sender, ColumnClickEventArgse) {//检查点击的列是不是现在的排序列. if (e.Column ==lvwColumnSorter.SortColumn) { //重新设置此列的排序方法. if (lvwColumnSorter.Order ==SortOrder.Ascending) {lvwColumnSorter.Order = SortOrder.Descending; } else {lvwColumnSorter.Order = SortOrder.Ascending; } } else { //设置排序列,默认为正向排序 lvwColumnSorter.SortColumn =e.Column; lvwColumnSorter.Order =SortOrder.Ascending; } //用新的排序方法对ListView排序 this.listView1.Sort(); } private void button1_Click(object sender, EventArgse) { Form2 obj = new Form2(); obj.Show(); } }}