Buenas,
La verdad es que no se como titular bien mi duda, y en como describir lo mejor posible el problema.
Les explico mi duda, tengo una clase que posee N propiedades. De esta clase voy a necesitar crear una cantidad no definida de objetos, por lo que para mantenerlos dipondré de una lista. O bien, definiré una nueva clase "List" que los administre. No interesa por el momento ni los tipos de esas propieades, ni si tendré una clase propia "List" o si simplemente utilizo un ObjectList que almacene el listado de objetos.
Lo más importante es que necesito mostrar al usuario del listado algunas de las N propiedades, digamos un M << N. El objetivo es informarle al usuario lo más importante, y la idea es disponer de un PopupMenu con un "Ver más". Este menú abrirá un cuadro de diálogo y detallará el resto de la información adicional.
Lo más fácil, que se me ha ocurrido, es tener un StringGrid, disponer de tantas columnas como M de estas propieades de interés y tantas filas como objetos a crear y mantenidos en la lista.
Ahora bien, yo quisiera asociar la fila con el objeto en cuestión. O que de algún modo pueda identificar la fila seleccionada con el objeto... Algo como el poder del TComboBox.Items.AddItem() que permite añadir no sólo un item sino también asociarlo con un objeto:
MiCombo.Items.AddItem(MiInstancia.Propiedad1, TObject(MiInstancia));
Y luego poder "recuperarlo" con algo como:
InstanciaSeleccionada := MiCombo.Items.Objects[MiCombo.ItemIndex];
Y listo, ya podemos hacer lo que se quiera con este objeto.
Pero llevado hacia el poder del TStringGrid.
El problema es que el TStringGrid, ofrece la referencia a los objetos por celda y no por fila:
TMiClase(MiGrid.Objects[Col, Fila])
La posibilidad que he considerado es que ponga una columna fija y haga de ésta como una especie de ID. Es decir, mostrar en la columna fija el índice de la instancia en cuestión dentro de la lista. De este modo con leer la fila seleccionada (aunque no le encuentro una propiedad SelectedRow, aunque si un evento OnSelectedRow) y al leer el contenido de la columna fija puedo saber a que instancia hace referencia y de esa forma presentar su correspondiente información adicional.
El tema es que no me convence demasiado tener que mostrar ese "ID" al usuario. Es casi una analogía a los IDs que uno tiene en la base de datos, ¿tiene utilidad mostrarlos?
Si, admito que a estos objetos luego se almacenan de forma persistente en una base de datos. Y, naturalmente, tendrán una propiedad "OID" que contendrá una referencia hacia el valor asignado por el motor como clave primaria.
Es un mal menor, pero estuve pensando en que si se puede evitar mostrarlo, mejor.
¿Que otras opciones considerarían ustedes?