Orden Numérico DatagridColumn
Este es un rápido ejemplo para ordenar columnas numéricas en un DataGrid de Flex. El órden por defaul en Flex es realizado por String y no por números. Si tenemos una columna numérica, tenemos que crear una función de ordenamiento customizada y establecer el sortCompareFunction para el DataGridColumn. Si tenemos muchas de estas columnas dispersas por todo nuestro sistema y utilizamos dataProviders que son ArrayCollection que consisten en muchos objetos, lo mejor es trasladar todo nuestro esfuerzo a realizar un override del DataGridColumn e implementar una función que realice la comparación dentro de la clase.
Clase que extiende a DataGridColumn
Aquí tenemos el código de nuestra propia clase:
package com.flexets.components.dataGridClasses { import mx.controls.dataGridClasses.DataGridColumn; import mx.utils.ObjectUtil; public class NumericDataGridColumn extends DataGridColumn { public static const NUMERIC:String = "N"; public function NumericDataGridColumn(columnName:String=null) { super(columnName); initCompare(NUMERIC); } function initCompare(numeric:Object):void { if (numeric == NUMERIC) { sortCompareFunction = numericCompare; } } /** * Pull the numbers from the objects and call the implementation. TAKEN FROM mx.collections.SortField */ private function numericCompare(a:Object, b:Object):int { var fa:Number; try { fa = dataField == null ? Number(a) : Number(a[dataField]); } catch(error:Error) { } var fb:Number; try { fb = dataField == null ? Number(b) : Number(b[dataField]); } catch(error:Error) { } return ObjectUtil.numericCompare(fa, fb); } } }
Usando nuestra clase en un DataGrid
El siguiente código te muestra como implementar nuestra nueva clase en el DataGrid:
<mx:DataGrid id="myDG" width="100%" height="100%" dataProvider="{myDataProvider}"> <mx:columns> <mx:DataGridColumn dataField="id"/> <dataGridClasses:NumericDataGridColumn dataField="order"/> <mx:DataGridColumn dataField="title"/> <dataGridClasses:NumericDataGridColumn dataField="price"/> </mx:columns> </mx:DataGrid>
Esto ha sido todo Flex: Orden Numérico DatagridColumn. Dejanos tus comentarios.
No hay artículos relacionados.



Un comentario
Guille
05/02/2013, a las 15:13 (UTC -3) Enlace a este comentario
Hola, te escribo pq me da un error que desconozco:
The prefix “dataGridClasses” for element “dataGridClasses:NumericDataGridColumn” is not bound.
te agradeceré cualquier ayuda, muchas gracias!
trabajo en flex 3 y puse dentro de mi proyecto, las siguientes carpetas:
src
com
flexets
components
dataGridClasses
y luego el paquete que indicas.
en mi mxml, puse