Sort the component datagrid by date with adobe flash and as3
Aquí os traigo un ejemplo y su descarga de cómo ordenar un datagrid por fecha, aunque existen multitud de ejemplos para Flex, para flash es un poco más difícil encontrarla así que he preparado un ejemplo sencillo.
Ejemplo:
Haz click en la columna de fecha para comprobar cómo se ordenan.
This movie requires Flash Player 9
Código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
import fl.data.DataProvider; var miArray:Array = new Array( {Nombre:"Javier", Apellido:"Vicente", Edad:"33", Fecha:"16/08/1078", Telefono: "123483947"}, {Nombre:"Sue Pennypacker", Apellido:"Pumuky", Edad:"12", Fecha:"01/04/2011", Telefono: "983710239"}, {Nombre:"Jill Smithfield", Apellido:"Shuachaneguer", Edad:"55", Fecha:"07/09/2012", Telefono: "376296502"}, {Nombre:"Jenifer", Apellido:"Suliban", Edad:"16", Fecha:"12/08/2012", Telefono: "687384754"}, {Nombre:"Shirley Goth", Apellido:"Gothikiki", Edad:"80", Fecha:"21/06/2012", Telefono: "829829292"} ); dg.columns=["Nombre","Apellido","Edad","Fecha","Telefono"]; dg.columns[0].width=100; dg.columns[1].width=90; dg.columns[2].width=50; dg.columns[3].width=100; dg.columns[3].sortCompareFunction=ordenaFecha; dg.columns[4].width=120; var dp:DataProvider=new DataProvider(miArray); dg.dataProvider=dp; /* Para que funcione, la fecha almacenada en el datagrid debe de estar en el siguiente formato y orden -> dia/mes/año El método parse del objeto date soporta los siguientes formatos Date.parse("07 12 2012"); mes dia año separado por espacios y en ese orden Date.parse("07/12/2012"); mes/dia/año separado por barras y en ese orden Date.parse("Jul 12 2012"); mes dia año abreviación del mes en ingles y separado por espacios Date.parse("Jul/12/2012"); mes/dia/año abreviación del mes en ingles y separado por barras En mi caso como la fecha almacenada está en el siguiente orden -> dia mes y año la función "ordenaFecha" se encarga de poner el mes delante del día utilizando el "array" para que el método "parse" funcione correctamente. En el caso que las fechas estuvieran en los formatos soportados anteriormente explicados no tendríamos que cambiar el orden del mes por el día y tan solo tendríamos que sustituir el código siguiente var f1:Array=i1.Fecha.split("/"); var f2:Array=i2.Fecha.split("/"); var s1:Number=(new Date(Date.parse(f1[1] +"/"+f1[0]+"/"+f1[2]))).getTime(); var s2:Number=(new Date(Date.parse(f2[1] +"/"+f2[0]+"/"+f2[2]))).getTime(); Por este otro var s1:Number=(new Date(Date.parse(i1.Fecha))).getTime(); var s2:Number=(new Date(Date.parse(i2.Fecha))).getTime(); */ function ordenaFecha(i1:Object,i2:Object):int { //var f1:Array=obj1["Fecha"].toString().split("/"); var f1:Array=i1.Fecha.split("/"); var f2:Array=i2.Fecha.split("/"); var s1:Number=(new Date(Date.parse(f1[1] +"/"+f1[0]+"/"+f1[2]))).getTime(); var s2:Number=(new Date(Date.parse(f2[1] +"/"+f2[0]+"/"+f2[2]))).getTime(); if (s1<s2) { return -1; } else if (s1 == s2) { return 0; } else { return 1; } } |
[download id=»32″ format=»2″]