Son muy similares a los que hay en los dbControles o "Controles enganchados" pero con una diferencia: no dependen de una base de datos. Se podrían definir como: "
Un gridview que muestra un array de dos dimensiones, colección o result, con ordenación de las columnas y filtrado simple de los datos"
Tóma ya.
La necesidad de ésto me surgió por dos lados, de uno, hay consultas muy lentas a Bases de Datos, que no son de recibo en los controles enganchados porque en ellos cada vez que filtras u ordenas hay que volver a recurrir a la base de datos y eso lo hace todo super lento. Por tanto decidí hacer un control que haga lo mismo que los conocidos dbGrid y dbGridFilter, pero sin depender de una base de datos.
Tienen una propiedad Source tipo Variant de donde se toman los datos, que puede ser un variant[] de string[], es decir un array de arrays de textos, o un array de colecciones o directamente un result (como se usa en el ejemplo).
En caso del Array[][] se usa directamente (hay una propiedad boolean, setheads,con la que puedes usar la primera línea del Array como cabeceras, pensada para cuando se pasa un array[][] basado en un CSV.
En caso de Collection[] se usan las claves como cabeceras y los contenidos, convertidos a string, como celdas.
En caso de Result, se usan los nombres de campo como cabeceras y el contenido como celdas y sólo se recurre a la base de datos una vez.
Tiene también la propiedad Titles que es un string[] para personalizar las cabeceras, WordWrap para textos completos, y demás.
La propiedad Value devuelve una colección con el título de la columna como clave y el contenido de las celdas de la línea seleccionada como valores.
En el traspaso y simplificación (siempre necesarios porque la escribí para el curro) puede que se me haya colado algún bug, que agradecería que me comunicaseis.
Espero que os sea útil.