Comunidad de diseño web y desarrollo en internet online

¿Cómo ordenar un Datagrid haciendo una excepción?

Citar            
MensajeEscrito el 09 Ene 2014 06:30 pm
Hola, tengo un datagrid con varias columnas. Una de ellas (columna movimientos) guarda un número positivo entero (0,1,2,12,22,233,etc). Los números pueden repetirse, por lo que perfectamente podemos tener (1,2,0,0,22,2,233,0,etc). La idea es ordenar en base a esa columna.

Se como ordenar un datagrid de forma ascendente o descendente, pero quiero que las filas con "0" salgan después de las que tienen un número positivo. Esto es, primero deberían salir ordenadas las filas con datos (1,2,12,22,233,etc) de forma ascendente, y luego ya saldrían aquellas con ceros (0,0,0,etc).

Si ordeno de la forma tradicional los ceros aparecen todos al principio o al final.
He probado varias cosas pero no funcionan, a ver si alguien puede sugerirme cómo hacerlo.

Ahora mismo tengo un bucle donde meto los datos en el dataprovider, primero meto aquellos con movimientos>0 y luego aquellos con movimientos=0. Pero claro, si hago un Array.DESCENDING para ordenar los datos se ponen los 0 delante.

Intuyo que hay que ordenar a mano, quizá antes de meter los datos en el dataprovider, no se.

Gracias

Por daniel69

78 de clabLevel



 

chrome
Citar            
MensajeEscrito el 17 Ene 2014 11:39 pm
Pues ya está claro.

Resumiendo mucho, lo que he hecho es hacer 2 bucles FOR.
En el primero excluyo los elementos que no me interesan, meto los datos en el DATAPROVIDER y lo ordeno.
A continuación entro en el segundo bucle, donde sólo me interesan los elementos antes excluidos, que voy metiendo en el DATAPROVIDER, sin ordenarlo posteriormente.

De esta forma los elementos que me interesan me salen ordenados... y luego el resto.

Aquí se ve mejor

Código :

//borramos cualquier dato anterior del "data provider"
losDatos.removeAll();
   
//1er bucle
for (i = 0; i < numResults; i++)
{               
   if(movimientos[i]>0) 
   losDatos.addItem({col_A: arrayA[i], col_Movs: movimientos[i], col_ID: arrayID[i]});
}   
   
losDatos.sortOn("col_Movs",  Array.NUMERIC ); //ordenamos
   
//2do bucle
for (i = 0; i < numResults; i++)
{               
   if(movimientos[i]>0) 
   losDatos.addItem({col_A: arrayA[i], col_Movs: movimientos[i], col_ID: arrayID[i]});
}   

//ojo, en este punto NO ordenamos o quedarán los '0' movimientos por delante de los '>0' movimientos
   
//ahora asignamos el DATAPROVIDER al datagrid
miDataGrid.dataProvider = losDatos;

Por daniel69

78 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.