private function useNumericSort(columns:Array, dg:DataGrid) {
dg.addEventListener(“headerRelease”,
function (evt:Object) {
var dataGrid = evt.target;
var data = dataGrid.dataProvider;
var column = evt.columnIndex;
var columnName = dataGrid.columnNames[column];
var direction = evt.sortDirection.toUpperCase();
var sortOptions = 0;
var useNumeric:Boolean = false;
for (var index in columns) {
if (columns[index] == column) {
useNumeric = true;
break;
}
}
if (useNumeric) {
data.sort(function(recordA, recordB) {
var a:Number = Number(recordA[columnName]);
var b:Number = Number(recordB[columnName]);
if (isNaN(a)) { a = 0; }
if (isNaN(b)) { b = 0; }
return (direction == ‘DESC’) ? (b-a) : (a-b);
}, sortOptions);
} else {
sortOptions |= (direction == ‘DESC’) ? 2 : 0;
sortOptions |= 1; // case-insentitive
data.sortOn(columnName, sortOptions);
}
});
}
(usage example: specify columns 0, 3, and 4 in order_dg as to be sorted numerically.)
useNumericSort([0,3,4], order_dg);