Ordenar datagrid por fecha

361 views
Skip to first unread message

David Pariente

unread,
Jun 11, 2008, 5:11:29 AM6/11/08
to madeinflex
Hola a todos,

Tengo un datagrid al que he tenido que desactivar la ordenación, entre otras cosas por que no se como ordenar por la columna fecha, ya que me la traigo de la base de datos en formato DD/MM/YYYY, y no realiza la ordenación correcctamente.

Supongo que Flex espera un formato del tipo MM/DD/YYYY o incluso un formato ISO estandard YYYY/MM/DD.

Seguro que aqui todos nos hemos encontrado con éste problema en un momento u otro...alguna idea brillante i fácil de implementar? :)

Muchas grácias!



Enviado desde Correo Yahoo!
La bandeja de entrada más inteligente.

Fabián Brussa

unread,
Jun 11, 2008, 7:45:47 AM6/11/08
to madeinflex
Para realizar correctamente el ordenamiento deberias utilizar tu
propia funcion de orden para la columna Fecha. Para ello utiliza la
propiedad sortCompareFunction del DatagridColumn.




On 11 jun, 06:11, David Pariente <xxmapach...@yahoo.es> wrote:
> Hola a todos,
>
> Tengo un datagrid al que he tenido que desactivar la ordenación, entre otras cosas por que no se como ordenar por la columna fecha, ya que me la traigo de la base de datos en formato DD/MM/YYYY, y no realiza la ordenación correcctamente.
>
> Supongo que Flex espera un formato del tipo MM/DD/YYYY o incluso un formato ISO estandard YYYY/MM/DD.
>
> Seguro que aqui todos nos hemos encontrado con éste problema en un momento u otro...alguna idea brillante i fácil de implementar? :)
>
> Muchas grácias!
>
> ______________________________________________

Ricardo Poblete

unread,
Jun 11, 2008, 9:39:36 AM6/11/08
to madei...@googlegroups.com
Claramente, como dice fabián. Te explico nuestra solucion, espero que a varios amigos les sirva.
Consideremos que tengo un un datagrid que recibe un ArayCollection como Dataprovider, el campo de fecha se llama FECHA y se encuentra en el formato "dd/mm/yyyy hh24:mi" por ejemplo ahora cuando escribo este correo es: "11/06/2008 09:24" , ahora si la fecha que tienes es sin horas, más simple aún.
 
La solución será utilizar una fuunción llamada "sortFechas" sea capaz de comparar las fechas.

En la columna del datagrid coloca la funcion que realizará la comparación entre tipos de datos de fecha correctos, es decir "date".

Sin embargo como mi dataprovider tiene la fecha como "String", debo transformarla en formato "Date" para así poder utilizar una función de comparación de la clase ObjectUtil  llamada "dateCompare".

Primero creamos la funcion que transformará la fecha en formato string a la fecha en formato date, la llamaremos "String2Date". (No explicaré la función, pero no es nada dificil de entender, lo básico en cortar con split el string)

private

function String2Date(fecha:String):Date{

var dia_mes:Array = fecha.split('/'); //corta a dia mes y el ultimo es año y hora juntos separado por un espacio

var dia:int = new Number(dia_mes[0]);

var mes:int = new Number(dia_mes[1]);

var agno_hora:String = dia_mes[2];

var arr:Array = agno_hora.split(' '); //corta el espacio que hay entre el año y la hora

var agno:int = new Number(arr[0]);

var hora_minutos:String = arr[1];

var arr2:Array = hora_minutos.split(':');

var hora:int = new Number(arr2[0]);

var minutos:int = new Number(arr2[1]);

var fecha_date:Date = new Date(agno, mes -1, dia, hora, minutos, 0, 0);

return fecha_date;

}

Segundo creamos la funcion que harála comparación de fechas en formato date

public

function sortFechas(itemA:Object, itemB:Object):int {

var dateA:Date = formatoFecha(itemA.FECHA);

var dateB:Date = formatoFecha(itemB.FECHA);

return ObjectUtil.dateCompare(dateA, dateB);

}

Finalmente en la columa del datagrid que tiene las fecha le indicamos que función realizará el orden

<mx:DataGridColumn

headerText="Fecha" dataField="FECHA" sortCompareFunction="sortFechas"/>

ESO ES TODO..

Saludos a todo el grupo.

 

:-)

 

David Pariente

unread,
Jun 11, 2008, 10:48:46 AM6/11/08
to madei...@googlegroups.com
wow...este Flex es la ·&="(&"/. Eso de poder decidir quien hará la ordenación es increible :)

una pregunta, esto permite realizar la ordenación en ambos sentidos? o habria que implementar algo mas?


muchas grácias!! Me irá de fábula! :D



----- Mensaje original ----
De: Ricardo Poblete <ripo...@gmail.com>
Para: madei...@googlegroups.com
Enviado: miércoles, 11 de junio, 2008 15:39:36
Asunto: [madeinflex] Re: Ordenar datagrid por fecha

David Pariente

unread,
Jun 11, 2008, 10:59:06 AM6/11/08
to madei...@googlegroups.com
Por cierto, en otra lista me han propuesto pasar la fecha a formato epoch (milisegundos),
Quizas de esta forma implantar esto tendria muchas menos lineas...i...al ser una conversión numérica QUIZA la haga más rápida...

Pero creo que la fecha en milisegundo puede que ahorre unas cuantas lineas...o no, por que quiza haya que convertir a YYYY/MM/DD antes de a epoch...

Bueno, es un simple comentario para hacer pensar...por si no teneis un sudoku a mano ;)
Cuando implante esto en un par de dias (me ha entrado algo muy urgente) quiza lo pruebo a ver que solución es más corta en número de lineas :)

Un saludo

Ricardo Poblete

unread,
Jun 11, 2008, 11:09:12 AM6/11/08
to madei...@googlegroups.com
Si, en ambos sentidos

Ricardo Poblete

unread,
Jun 11, 2008, 11:12:31 AM6/11/08
to madei...@googlegroups.com
La línea crea un objeto de tipo date
 
var fecha_date:Date = new Date(agno, mes -1, dia, hora, minutos, 0, 0);
 
el objetivo de las lineas anteriores es para extraer los datosy crear finalmente el objeto date que perimitirá tener:

"The number of milliseconds since midnight January 1, 1970, universal time, for a Date object"  (Adobe® Flex™ 3 Language Reference)
 
 
Suerte..
Reply all
Reply to author
Forward
0 new messages