El control ListBox es uno de los más completos en su versión para aplicaciones Desktop (macOS, Windows y Linux) creadas con Xojo; y como probablemente ya sepas, dicho control incluye por omisión la capacidad de reordenar cualquiera de las columnas seleccionadas cuando se hace clic sobre sus encabezados (propiedad que puedes activar en el panel Inspector).
Ahora bien, por omisión Xojo realizará la ordenación de los elementos correspondientes a la columna pulsada atendiendo a su orden lexicográfico y no numérico; es decir, tratando los contenidos disponibles en cada una de las celdas de la columna como si fueran cadenas de texto, aunque estos se correspondan realmente con valores numéricos. Después de todo, cuando añades dichos valores a la columna… tendrás que hacerlo como si fueran texto.
Otras formas de ordenar un ListBox
La buena noticia es que Xojo proporciona para el control ListBox el evento CompareRows, y mediante su implementación podemos añadir nuestro propio sistema de comparación de valores.
Como parte de la signatura del evento, recibiremos las dos filas que se están comparando, así como la columna correspondiente y el resultado que, pasado por referencia, deberá contener el resultado de nuestra comparación personalizada:
- -1 En el caso de que el valor de la primera celda sea inferior al de la segunda
- 1 En el caso de que el valor de la primera celda sea superior al de la segunda
- 0 Si ambos valores son idénticos
Por último, el evento debe devolver el valor booleano True si deseamos que el listado utilice nuestro resultado de comparación, o bien False si deseamos que se proceda a ordenar las filas atendiendo al orden lexicográfico utilizado por omisión.
En el siguiente vídeo puedes ver de qué modo tan sencillo puedes, por tanto, establecer que la columna de un ListBox ordene sus contenidos atendiendo a sus valores numéricos reales, ya sea de forma ascendente o descendente.
[…] en una sola entrada de AprendeXojo. De hecho, en una entrada anterior ya vimos de qué modo podemos ordenar las columnas de un ListBox por el valor numérico de sus datos. En esta ocasión veremos de qué modo tan sencillo podemos crear listados […]