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);
         }
      });
}
 

useNumericSort([0,3,4], order_dg);