网上这段代码都是一样的出自微软帮助支持:http://support.microsoft.com/default.aspx?scid=kb;EN-US;319401
园子里面的高手加上了注释的,我是重他们那儿Copy的对其封装成立DLL文件直接引用后使用,解决了想下面的一些情况:
排序的如果对于数字的话,只按照数值的第一位第一位排序啊:
1
12
13
2
3
4
这种情况,如果你要对一些特殊的数据排序的话只需对比较进行修改:
this.listView1.ListViewItemSorter = new Common.ListViewColumnSorter();
this.listView1.ColumnClick+=new ColumnClickEventHandler(Common.ListViewHelper.ListView_ColumnClick);
这样就可以排序了!DLL及CS源码文件下载
园子里面的高手加上了注释的,我是重他们那儿Copy的对其封装成立DLL文件直接引用后使用,解决了想下面的一些情况:
排序的如果对于数字的话,只按照数值的第一位第一位排序啊:
1
12
13
2
3
4
这种情况,如果你要对一些特殊的数据排序的话只需对比较进行修改:
/**//// <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;
// 比较 <<<<<<<<<<<<< 对此处进行修改针对特殊的数据进行比较>>>>>>>>>>>>>
int a=0, b=0;
if (int.TryParse(listviewX.SubItems[ColumnToSort].Text, out a) && int.TryParse(listviewY.SubItems[ColumnToSort].Text, out b))
{
compareResult = ObjectCompare.Compare(a, b);
}
else
{
compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text.Trim(), listviewY.SubItems[ColumnToSort].Text.Trim());
}
// 根据上面的比较结果返回正确的比较结果
if (OrderOfSort == SortOrder.Ascending)
{
// 因为是正序排序,所以直接返回结果
return compareResult;
}
else if (OrderOfSort == SortOrder.Descending)
{
// 如果是反序排序,所以要取负值再返回
return (-compareResult);
}
else
{
// 如果相等返回0
return 0;
}
}
引用了DLL文件后在窗体Load事件里或者构造函数里写:/// 重写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;
// 比较 <<<<<<<<<<<<< 对此处进行修改针对特殊的数据进行比较>>>>>>>>>>>>>
int a=0, b=0;
if (int.TryParse(listviewX.SubItems[ColumnToSort].Text, out a) && int.TryParse(listviewY.SubItems[ColumnToSort].Text, out b))
{
compareResult = ObjectCompare.Compare(a, b);
}
else
{
compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text.Trim(), listviewY.SubItems[ColumnToSort].Text.Trim());
}
// 根据上面的比较结果返回正确的比较结果
if (OrderOfSort == SortOrder.Ascending)
{
// 因为是正序排序,所以直接返回结果
return compareResult;
}
else if (OrderOfSort == SortOrder.Descending)
{
// 如果是反序排序,所以要取负值再返回
return (-compareResult);
}
else
{
// 如果相等返回0
return 0;
}
}
this.listView1.ListViewItemSorter = new Common.ListViewColumnSorter();
this.listView1.ColumnClick+=new ColumnClickEventHandler(Common.ListViewHelper.ListView_ColumnClick);
这样就可以排序了!DLL及CS源码文件下载