动态创建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方法来实现!

浙公网安备 33010602011771号