ListView控件单击标头对指定列排序!

网上这段代码都是一样的出自微软帮助支持: 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源码文件下载

转载于:https://www.cnblogs.com/CrazyGsd/archive/2008/05/28/1209418.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值