DataGrid的排序问题 解决办法

flex的DataGrid大家肯定很熟悉吧。最近在开发的过程中碰到了datagrid列的排序问题。

症状是这样的:

如图,当我点击一级、二级、三级的时候不能排序,由于我的这个DataGrid的dataprovider是从一个十分复杂的xml里获取的

所以不是简单的设置了下dataField属性 而是通过labelFunction来获取各项值的。但是这就出现了问题就是不能正常排序。

网上有解决方法,如设置DataGridColumn的sortCompareFunction属性,

dgc.sortCompareFunction = function(obj1:Object, obj2:Object): int {
  
return  ObjectUtil.stringCompare(dgc.labelFunction(obj1,dgc),dgc.labelFunction(obj1,dgc));
}

 

 

这种方法固然可以,但是在我的代码里却不行,因为我的DataGridColumn是通过数组循环动态生成的。这样循环结束dgc就指向最后

一次循环的那个,排序依旧不正确。

经过我分析DatagridColumn类 我找到了解决方法,大家可以试一下。十分有效,可以在任何场合使用。

ExpandedBlockStart.gif 代码
package  {
    
import  mx.controls.dataGridClasses.DataGridColumn;
    
import  mx.utils.ObjectUtil;

    
public   class  DataGridColumnE  extends  DataGridColumn {
        
public  function DataGridColumnE(columnName:String = null ) {
            
super (columnName);
        }
        
        override 
public  function get sortCompareFunction():Function {
            
return  compareFunc;
        }
    
        
private  function compareFunc(obj1:Object,obj2:Object): int {
            var data1:String,data2:String;
            
if (labelFunction == null ){
                data1
= obj1[dataField];
                data2
= obj2[dataField];
            }
else {
                data1
= labelFunction(obj1, this );
                data2
= labelFunction(obj2, this );
            }
            var regExp:RegExp
=/^ [\d\.] * $ / ;
            
if (regExp.test(data1) && regExp.test(data2))  return  ObjectUtil.numericCompare(Number(data1),Number(data2));
            
else   return  ObjectUtil.stringCompare(data1,data2);
        }
    }
}

 

我写了这样一个类DataGridColumnE,来代替DataGridColumn,覆盖了里面的sortCompareFunction方法,这样

sortCompareFunction函数里 也就是compareFunc里面就能访问到DataGridColumn本身了,然后可以在compareFunc

里面判断是否是String类型的 还是Number类型的 或者是Date类型的,这样在进行排序的时候就不会出错了。

转载于:https://www.cnblogs.com/huomiao/archive/2010/10/29/1864427.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值