1声明 private ListViewColumnSorter lvwColumnSorter; 2窗体构造函数添加下面代码 // 创建一个ListView排序类的对象,并设置listView1的排序器 lvwColumnSorter = new ListViewColumnSorter(); this .listView1.ListViewItemSorter = lvwColumnSorter; 3.在listView1的ColumnClick事件中添加以下代码: // 检查点击的列是不是现在的排序列. 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 .listView.Sort(); 4.添加一个类 using System.Collections; using System.Windows.Forms; /**/ /// <summary>/// 继承自IComparer/// </summary> public class ListViewColumnSorter : IComparer ... { /**//// <summary> /// 指定按照哪个列排序 /// </summary> private int ColumnToSort; /**//// <summary> /// 指定排序的方式 /// </summary> private SortOrder OrderOfSort; /**//// <summary> /// 声明CaseInsensitiveComparer类对象, /// 参见ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemCollectionsCaseInsensitiveComparerClassTopic.htm /// </summary> private CaseInsensitiveComparer ObjectCompare; /**//// <summary> /// 构造函数 /// </summary> public ListViewColumnSorter() ...{ // 默认按第一列排序 ColumnToSort = 0; // 排序方式为不排序 OrderOfSort = SortOrder.None; // 初始化CaseInsensitiveComparer类对象 ObjectCompare = new CaseInsensitiveComparer(); } /**//// <summary> /// 重写IComparer接口. /// </summary> /// <param name="x">要比较的第一个对象</param> /// <param name="y">要比较的第二个对象</param> /// <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) ...{ // 因为是正序排序,所以直接返回结果 return compareResult; } else if (OrderOfSort == SortOrder.Descending) ...{ // 如果是反序排序,所以要取负值再返回 return (-compareResult); } else ...{ // 如果相等返回0 return 0; } } /**//// <summary> /// 获取或设置按照哪一列排序. /// </summary> public int SortColumn ...{ set ...{ ColumnToSort = value; } get ...{ return ColumnToSort; } } /**//// <summary> /// 获取或设置排序方式. /// </summary> public SortOrder Order ...{ set ...{ OrderOfSort = value; } get ...{ return OrderOfSort; } }}