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;
}
}
}