2008-11-12 62 views
2

我正在使用Flex数据网格,并且需要对数列中的某些列进行排序。
看着sortCompareFunction,好像我需要为每一列我想排序创建一个不同的函数,因为我的排序函数必须知道它排序在哪个字段上。Flex datagrid通用数字排序函数?

有没有什么办法可以将字段传递给函数进行排序?这样我只需要一个数字排序功能。

回答

1

我没有使用这个功能吧:

function fieldNumericSorter(field:String):Function { 
    return function (obj1:Object, obj2:Object):int { 
     return sign(int(obj1[field]) - int(obj2[field])); 
    } 
}

和如果您正在使用与XML数据提供程序将DataGrid是需要排序设置

colToBeSorted.sortCompareFunction = fieldNumericSorter("fieldname");
1

每一列,这个工作对我来说(修改从亚历克斯的答案):

private function xmlDataGridNumericSorter(field:String):Function 
{ 

    return function (obj1:Object, obj2:Object):int 
    { 
     var num:Number = ((Number)(obj1.attribute(field)) - (Number)(obj2.attribute(field))); 
     return (num > 0) ? 1 : ((num < 0) ? -1 : 0); 
    } 

} 

dataGridColumn.sortCompareFunction = xmlDataGridNumericSorter(xmlAttribute.name().toString()); 

一个很不错的解决方案,考虑如何常见的程序,这可能是..

感谢亚历克斯,希望这有助于人们进一步。

0

我没有使用一个数值函数进行排序 - 代替做了以下:

arrayCollObject.addItem({Col1中:rowData [0],Col2中:parseFloat(rowData [1])});

这似乎是正确排序。