Amigos, este es un problema con el que he tenido que lidiar recurrentemente durante toda mi carrera y aun no he podido conseguir una solucion satisfactoria desde el punto de vista visual.
Yo trabajo mucho con listas para presentar datos y luego permitirle al usuario operar sobre esos datos seleccionando uno o mas filas en la lista y luego aplicando una accion sobre las filas seleccionadas.
Inicialmente usaba un control ListBox para esto, pero se complicaba mucho el tema de los titulos para las columnas y no soportaba el mostrar mas columnas de las que cabian en el ancho del control. Adicionalmente, el control no se volvia muy lento cuando la lista debia mostrar mas de unas pocas decenas de resultados.
Luego intente con el ListView, el cual me solucionaba el tema de las multiples columnas y los titulos de las mismas, y de paso me permitia aplicar coloreado dinamico a las filas, mostrar imagenes, etc. Lamentablemente el ListView tampoco es apropiado cuando tienes que manejar varios centenares de filtas.
Finalmente termine creando un control personalizado basado en Grid, el cual se podia configurar en tiempo de ejecucion de manear muy sencilla, y que ya incluia funciones como busqueda incremental, autoordenamiento en las columnas, etc.
El problema que no he podido solucionar es como mantener seleccionado el registro actual en el grid luego de actualizar su contenido. Me explico mejor. El usuario entra al editor y selecciona un filtro predefinido el cual determina los registros a mostrar en el grid. Una vez mostrados los datos, el grid selecciona automaticamente la primera fila del mismo. Luego digamos que el usuario selecciona el 5to registro y luego pulsa el boton de actualizar los datos en pantalla. Al hacer esto, el editor repite el query que devuelve los datos apropiados para el filtro actual y actualiza el grid en pantalla. El control, antes de actualizar, guarda el ID del registro que estaba seleccionado en el grid de modo que, luego de actualizarlo con los nuevos datos, hace un LOCATE para seleccionar de nuevo el registro que estaba activo antes del refresh. Si ocurre que ese registro ya no existe (porque fue anulado o ya no forma parte de la vista actual), el grid selecciona automaticamente el primer registro.
Todo funciona bien, excepto por el hecho de que al hacer el LOCATE el grid desplaza las filas de modo que el registro seleccionado queda en la primera posicion, lo cual es confuso para el usuario pues no queda ninguna indicacion de que hay mas registros arriba de ese.
Como han hecho uds para manejar esta situacion?
Saludos
Victor Espina