Página principal
Artículos y trucos
Catálogo de productos
Ejemplos y descargas
Mis libros
Cursos de formación
Investigación y desarrollo
Libros recomendados
Mis páginas favoritas
Acerca del autor
 
En colaboración con Amazon
 
Intuitive Sight

Cargando datos en un control de listas

En los últimos tiempos, cuando tengo que mostrar un conjunto de filas al usuario y no es necesario que este conjunto sea editable, en vez de utilizar la archiconocida rejilla (TDBGrid) echo mano de un control de listas TListView. No sólo por el cambio estético, que puede ser discutible, sino también por la posibilidad de mostrar casillas de verificación (checkboxes) asociadas a cada fila. Basta con asignar True a la propiedad Checkboxes del control para que el usuario pueda seleccionar un conjunto de filas con la mayor tranquilidad del mundo. Si es usted de los que no se resigna a perder las líneas horizontales y verticales de las rejillas de Delphi, puede activar la propiedad GridLines y sus sueños se harán realidad. Por último, puede incluso intercambiar la posición de las columnas si activa FullDrag. Sólo por mencionar algunas posibilidades evidentes.

Claro, Delphi no trae entre sus componentes una TDBListView; hay que cargar los datos de una tabla o consulta directamente en la propiedad Items del control. No es una tarea muy complicada, pues en el número de Junio de Mundo Delphi muestro un ejemplo de cómo ayudarnos con un frame para simular una rejilla de datos...

... lo malo es que si cargamos chapuceramente los datos, la operación se ralentizará inutilmente, y el efecto visual será bastante desagradable de observar. Sin embargo, un par de trucos sencillos nos evitarán este inconveniente:

  • Antes de comenzar la carga, llame al método BeginUpdates de la propiedad Items del control, y cuando haya terminado llame a su pareja: EndUpdates. La primera llamada evita que se redibuje el control cada vez que se añade una nueva línea.

  • El segundo truco es más importante, por ser menos conocido. Antes de empezar a añadir filas, asigne a la propiedad AllocBy del TListView el número de registros que tiene pensado cargar. Normalmente el conjunto de datos que se va a explorar contiene un puñado de filas. ¡De no ser así no tendría mucho sentido utilizar TListView! De modo que no debe ser traumático para Delphi el que utilicemos la función RecordCount para saber con cuántos registros contamos.

La propiedad AllocBy informa al control sobre el número de elementos que se van a almacenar en memoria. Si no ajustamos este número de antemano, cada vez que añadimos un nuevo elemento, el control tiene que pedir memoria dinámica, lo que disminuye la velocidad y aumenta considerablemente el riesgo de fragmentación.