private class ListViewColumnSorter : System.Collections.IComparer { /// <summary> /// 设置要排序的列 /// </summary> public int ColumnToSort; /// <summary> /// 设置排序顺序 /// </summary> public System.Windows.Forms.SortOrder OrderOfSort; /// <summary> /// 大小写不敏感的比较对象 /// </summary> private System.Collections.CaseInsensitiveComparer ObjectCompare; /// <summary> /// 构造 /// </summary> public ListViewColumnSorter() { // 初始排序列号为0 ColumnToSort = 0; // 初始设置为不排序 OrderOfSort = System.Windows.Forms.SortOrder.None; // Initialize the CaseInsensitiveComparer object ObjectCompare = new System.Collections.CaseInsensitiveComparer(); } /// <summary> /// 该方法继承自IComparer接口。它通过比较两个对象使用不区分大小写的比较。 /// </summary> /// <param name="x">第一项</param> /// <param name="y">第二项</param> /// <returns>比较的结果。 “0“相等,负:X<Y,正X>Y public int Compare(object x, object y) { int compareResult; ListViewItem listviewX = (ListViewItem)x; ListViewItem listviewY = (ListViewItem)y; if (ColumnToSort > 0 || listviewX.SubItems.Count==1) { // 不区分大小写比较 compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text); } else { int a = int.Parse(listviewX.SubItems[ColumnToSort].Text); compareResult = a.CompareTo(int.Parse(listviewY.SubItems[ColumnToSort].Text)); } // 计算对象比较的返回值 if (OrderOfSort == System.Windows.Forms.SortOrder.Ascending) { // 如果是升序 return compareResult; } else if (OrderOfSort == System.Windows.Forms.SortOrder.Descending) { // 如果是降序 return (-compareResult); } else { // 不比较 return 0; } } }