mostrar resultados de consulta en textbox - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: Bases de Datos (https://gambas-es.org/forum-6.html) +--- Tema: mostrar resultados de consulta en textbox (/thread-1830.html) |
mostrar resultados de consulta en textbox - alberto-moyano - 28-12-2024 Hola gente, espero hayan tenido buenas fiestas. Siguiendo la sugerencia de Tincho estoy haciendo una actualización en mi aplicación, pasando las consultas al evento data, este es el código Código: Public Sub VListaBIB_Data(Row As Integer, Column As Integer) el evento funciona sin problemas, ahora bien cuando hago click en cualquiera de las filas pretendo que se muestren en los textbox correspondientes los datos de la fila seleccionada, este es el código que escribi Código: Public Sub VListaBIB_RowClick(Row As Integer) Y este es el código que diseña el grid en el evento open del formulario Código: ' Ejecutar las consultas SQL Estoy medio perdido, porque lei en algun lugar a Shordi decir que el evento data no trabaja con filas, alguno tiene idea de por donde vienen los tiros. Saludos RE: mostrar resultados de consulta en textbox - guizans - 29-12-2024 Creo que el problema es el evento VListaBIB_RowClick. Supongo que estas usando un GridView por el evento _Data. Yo lo que hago sería algo así: Código: VListaBIB_Click() Con esto se dispara el evento al hacer click en el GridView. A continuación muevo el puntero del resultado de la base datos a la fila que ha sido seleccionada con: Código: ContenidoBibTotal.Moveto(VListaBIB.Row) y a partir de ahi rellenar todos los textbox. Creo que es algo así. Otra cosa. Yo el evento Data lo relleno de esta forma, me parece más limpia: Código: Public Sub VListaBIB_Data(Row As Integer, Column As Integer) Código: VListaBIB.Rows.Count = ContenidoBibTotal.Count Un saludo. RE: mostrar resultados de consulta en textbox - Harpo - 09-01-2025 Saludos, Seguramente el problema, al cargar los TextBox, esté en el código que se ejecuta entre la carga del GridView, al abrir el formulario, y el evento RowClick. Revisando el código no veo porqué no debería mostrar los datos siempre que el Result ContenidoBibTotal tenga datos, en algún momento debe pasar a ser nulo. Por otro lado, y en mi humilde opinión, yo en el evento RowClick haría la carga de los TextBox directamente desde el Result ContenidoBibTotal, no desde la propiedad Text de la celda, por cómo funciona el control GridView. GridView tiene una clase interna para manejar los datos de las celdas (_GridView_Data) y una clase para las celdas (_GridView_Cell). Y los valores de cada celda los almacena en un objeto Collection ($cCells), donde la clave es Fila-Columna y el valor un _GridView_Data. Cuando se usa el evento Data cargamos la propiedad Data del GridView, que es un _GridView_Data que el control después desecha, no almacena nada en $cCells. Por tanto, en el evento Data el control no almacena los datos para futuros usos, y cuando se le pide el valor de la propiedad Text de una celda vuelve a llamar a ese evento para recuperarlos. Por ejemplo, en el código que propone Guizans, donde crea e inicializa un String[] con los nombres de los campos, está creando e inicializando esa variable para cada celda. Y cuando recupera información de una celda, nueva llamada al evento. Personalmente utilizaría una variable de ámbito superior accesible desde el evento para evitar crear e inicializar una variable tantas veces. Un saludo, Harpo. RE: mostrar resultados de consulta en textbox - alberto-moyano - 10-01-2025 Gracias guizans y Harpo, ya solucioné el tema revisando el comentario de guizans, algo que encontré en la red del compañero Julio y otro tanto reviendo algunos videos de Shordi, llegue a esto que funciona bien (y muy rápido) el evento open contiene esto Código: Mod_Funciones.ConfigurarGridView(VListaBIB) el evento data, quedo así Código: Public Sub VListaBIB_Data(Row As Integer, Column As Integer) el evento click, quedo así Código: Public Sub VListaBIB_Click()' grid en el formulario principal y la función que diseña el grid así Código: ' en el módulo de funciones se muestran los datos en los campos con este código que está en un módulo Código: Public Sub VerBibTeXenVListaBIB() Harpo, voy a intentar entender lo que dices, es demasiado para mí, pero no le escapo al bulto. Gracias y saludos RE: mostrar resultados de consulta en textbox - Harpo - 11-01-2025 Saludos, Lo que intentaba explicar es que cuando se carga un GridView con el evento Data el control no guarda los datos de las celdas internamente en un Collection que tiene para eso ($cCells). Y cuando en nuestro código escribimos: Código: Textbox1.Text = GridView1[iRow, iCol].Text Como GridView no tiene guardado ningún dato vuelve disparar el evento Data para recuperar el texto de la celda que le estamos pidiendo. En su código cuando carga los TextBox lo que ocurre es: - El GridView busca si existe la celda para la fila y columna solicitada. No lo encuentra internamente. - GridView lanza el evento Data y carga la propiedad Text de la celda desde la base de datos. - GridView le devuelve el valor Text de la celda y se carga en el TextBox. En su caso cómo solo carga una fila, aunque sean 112 columnas, no tiene problemas. Si cargara 1.000 filas ejecutaría 112.000 veces el evento Data del GridView, y ahí sí tendría un problema de rendimiento. Por eso le comentaba que, en mi humilde opinión, es más práctico que la carga de los TextBox la hiciera desde el Result de la base de datos, elimina las llamadas al evento Data que es un mero intermediario entre los TextBox y la base de datos. Un par de recomendaciones: Código: Mod_Funciones.VerBibTeXenVListaBIB(VListaBIB.row) ''En el evento Click de la celda pasar como parámetro la fila Un último apunte, en el evento Data no es necesario controlar si la fila es mayor o igual a cero, tampoco la columna. GridView antes de lanzar el evento Data controla que la fila y la columna son correctas. Espero haberme explicado mejor, un saludo. Harpo. RE: mostrar resultados de consulta en textbox - guizans - 11-01-2025 Efectivamente Harpo, si solución es si el GridView tiene pocos datos a mostrar. Otra solución es hacer una consulta a la base de datos con los datos a mostrar en el GridView y otra consulta que es la que tiene todos los datos que se usarán para mostrar en los TextBox. No se cual puede ser más eficiente en casos de muchas entradas, nunca se me ha dado el caso. Un saludo. Efectivamente Harpo, mi solución es si el GridView tiene pocos datos a mostrar. Otra solución es hacer una consulta a la base de datos con los datos a mostrar en el GridView y otra consulta que es la que tiene todos los datos que se usarán para mostrar en los TextBox. No se cual puede ser más eficiente en casos de muchas entradas, nunca se me ha dado el caso. Un saludo. |