网上这段代码都是一样的出自微软帮助支持:http://support.microsoft.com/default.aspx?scid=kb;EN-US;319401
园子里面的高手加上了注释的,我是重他们那儿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事件里或者构造函数里写:
this.listView1.ListViewItemSorter = new Common.ListViewColumnSorter();
this.listView1.ColumnClick+=new ColumnClickEventHandler(Common.ListViewHelper.ListView_ColumnClick);

这样就可以排序了!DLL及CS源码文件下载