动态创建Datagrid表头排序sortCompareFunction的使用

  最近使用flex的datagrid发现一问题,如果该dataGrid有一列是数值列,点击表头排序的时候希望它按数字来排的。可是它默认是排序方式按字符串排序的。
解决问题的方式很简单可以自定义排序方法,然后和dataGrid的该列的sortCompareFunction绑定。代码如下:
        var dataField:String = map.dataField;
                var label:String = map.headerText;
                if(dataField!=null && label!=null){
                    var column:DataGridColumn = new DataGridColumn();
                    column.dataField = dataField;
                    column.headerText = label;
                    column.headerWordWrap = true;
                    colums.push(column);
                    if(dataField == "value")
                    {
                        column.sortCompareFunction = sortcompare;
                    }
                }
    //安数值大小排序
        private function sortcompare(obj1:Object,obj2:Object):int
        {
            var num1:Number=Number(obj1.value);
            var num2:Number=Number(obj2.value);
            if(num1>num2){
                return 1;
            }else if(num1<num2){
                return -1;
            }else{
                return 0;
            }
        }

如果是动态创建的DataGridColumn不确定dataField字段,可采用下面的方法:

dgColumn.sortCompareFunction=sortFunc(item.@columnName);

item.@columnName 是xml 里一个属性值,是个字符串。

下面是写sortFunc函数:
          private static function sortFunc(field:String):Function{                          
                          return function(obj1:Object, obj2:Object):int{
                                  return ObjectUtil.numericCompare(obj1[field],obj2[field]);
                          }
                  }

传入字段名称,返回compare方法来实现!

 
posted @ 2012-12-21 13:44  小小有  阅读(558)  评论(0)    收藏  举报