«

»

jul 23 2012

avatar

Imprimir este Entrada

Flex: Orden Numérico DatagridColumn

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.

Be Sociable, Comparte a SurPatterns!

No hay artículos relacionados.

Acerca del autor

avatar

Emmanuel

Ingeniero en Sistemas. Amante de la programación. Tiene conocimientos de: Java, Visual .Net, C#, Adobe Flex, HTML5, JavaScript, ORMs como Hibernate y las principales bases de datos. También trabajó con otras tecnologías como: People Soft y SAP. Actualmente también escribe artículos para su sitio personal SurPatterns. Pueden seguirlo en twitter a traves de @SurPatterns.

Enlace permanente a este artículo: http://surpatterns.com/sitio/tutoriales-programacion-surpatterns/flex/flex-orden-numerico-datagridcolumn/

Un comentario

  1. avatar
    Guille

    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

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Puedes utilizar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">