Como Controlar El Evento Data De Gridview?


Subject: Como Controlar El Evento Data De Gridview?
Hola a todos,

Estoy desarrollando una aplicación personal para gestionar la compras que realizo, utilizando una base de datos sqlite con tres tablas.
El caso es el siguiente:
Tengo un formulario con un tabPanel de dos pestañas, en la primera pestaña hay un gridView(1) que muestra los datos de la tabla compras y en la segunda pestaña otro gridView(2) que va a mostrar los datos de la tabla DetalleCompras.

Y funciona de la siguente manera:
al iniciar el formulario se muestra la pestaña1, carga el gridView1 y muestra todas las compras, al selecionar una de ellas y pasar a la pestaña2
se carga el gridView2 y muestra los detalles de la compra que se seleciono en el gridview1
captura_de_pantalla_2016_06_16_15_48_41 captura_de_pantalla_2016_06_16_15_49_35

Para rellenar ambos Grids realizo la consulta y mediante el evento data.
Private Sub cargar(consulta As String) 'Aqui se realiza la consulta a la tabla Compras
Dim f, c As Integer
Try desconectar
conectar
If consulta = "" Then
rs = cn.Exec("Select * From Compras order by FechaCompra")
Else
rs = cn.Exec(consulta)
Endif
GridView1.Rows.Count = rs.Count
End

Public Sub GridView1_Data(Row As Integer, Column As Integer) ' Aqui re rellena el gridView1 con los resultados obtenido
rs.moveTo(row)
GridView1.Data.text = Str(rs[GridView1.Columns[column].text])
End

Public Sub TabPanel1_Click() 'Al cambiar de pestaña se realiza la consulta a la tabla detalleCompras
Dim f As Integer, id As String
Try desconectar
conectar
If TabPanel1.Index = 1 Then
If GridView1.Rows.Selection.Count <> 0 Then
id = GridView1[GridView1.Rows.Selection[0], 0].Text ''AQUI SE LANZA DE NUEVO EL EVENTO DATA DEL GRIDVIEW1
rs = cn.Exec("select DetalleCompras.IdDetalle, Productos.Nombre as 'Producto', DetalleCompras.Cantidad, DetalleCompras.Monto From DetalleCompras, Productos where Productos.IdProductos = DetalleCompras.IdProducto And DetalleCompras.IdCompra = &1 ", id)
GridView2.Rows.Count = rs.Count
Endif
Endif
End

Public Sub GridView2_Data(Row As Integer, Column As Integer) 'Aqui se rellana el GridView2 con los resultados obtenidos
rs.moveTo(row)
GridView2.Data.text = Str(rs[GridView2.Columns[column].text])
End


El problema surge que al interactuar con los datos del gridView1 se vuelve a lanzar el evento data y genera un error debido a que ya no existe datos en la variable rs y cuelga el programa, o vacia por completo el gridView1.

Alguna idea de como controlar el evento Data?

Profile PM  
Subject: Re: Como Controlar El Evento Data De Gridview?
No es que pueda ayudarte tanto como quisiera.

Creo que podrías reducir parte de código. Podrías usar un grupo para los Gridviews, que tuvieran
un código común. Para el evento Data te vendría bien. El evento es el mismo para los dos Gridviews.

Necesitas usar la propiedad Tag y Last de cada Gridview.
Por ejemplo, imagina que tienes dos botones, que son parte del grupo "Botones"
Cada botón tiene una propiedad distinta de tag.

El botón de saludar tiene la propiedad tag como valor 0 y el botón despedir tiene el
valor de la propiedad tag a 1.

El evento Click es el mismo para los dos, pero no repites código.

Public Sub Botones_Click()

Select Case Last.tag
Case 0
Message("Hola")
Case 1
Message("Hasta pronto")
End Select

End


Eso por ahora.

En TabPanel1, cuando el índice es 0, ¿ que hace ?. ¿ Solo funciona con el 1 ?.

Saludos

Subject: Re: Como Controlar El Evento Data De Gridview?
Hola, vr_rv

Creo que tu problema ocurre porque desconectas la base de datos dentro del evento click del tabpanel. El estar la conexión cerrada, el objeto result no puede devolver datos, provocando otros efectos colaterales.

No deberías desconectar de la base de datos hasta que vayas a salir de tu programa, te lo digo por experiencia.

Saludos

Profile PM  
Subject: Re: Como Controlar El Evento Data De Gridview?
Dos GridView. Dos Eventos_Data. Un sólo Result...

mmmm... asigna un result a cada gridview y no tendrás problemas.

Además de lo que dice jguardon, Tanto cerrar y abrir la base de datos te enlentece mucho el asunto. Déjala abierta.

Saludos.

Last edited by shordi on Thursday, 23 June 2016, 20:03; edited 1 time in total
Profile PM  
Subject: Re: Como Controlar El Evento Data De Gridview?
jguardon escribió: [Ver mensaje]
Hola, vr_rv

Creo que tu problema ocurre porque desconectas la base de datos dentro del evento click del tabpanel. El estar la conexión cerrada, el objeto result no puede devolver datos, provocando otros efectos colaterales.

No deberías desconectar de la base de datos hasta que vayas a salir de tu programa, te lo digo por experiencia.

Saludos


Cuando comence a trabajar con conexiones a bases de datos constantemente sufria errores de conexion, por dejar abierta la conexion o por no abrirla, razon por la cual adopte la costumbre de tratar de cerrar la conexion y abrirla en cada funcion que necesitara consultar la base de datos.
ahora tendre que cambiar mi costumbre.

Gracias por el consejo jguardon

Profile PM  
Subject: Re: Como Controlar El Evento Data De Gridview?
shordi escribió: [Ver mensaje]
Dos GridView. Dos Eventos_Data. Un sólo Result...

mmmm... asigna un result a cada gridview y no tendrás problemas.

Además de lo que dice jguardon, Tanto cerrar y abrir la base de datos te enlentece mucho el asunto. Déjala abierta.

Saludos.


Gracias Shordi. ya pude solucionar. efectivamente agregando un Result para cada envento Data ya funciona todo correctamente.

En cuanto sea mas o menos funcional el programa lo subo al foro para que le puedan dar un vistazo...

Profile PM  
Subject: Re: Como Controlar El Evento Data De Gridview?
vr_rv escribió: [Ver mensaje]
sufría errores de conexión, por dejar abierta la conexión o por no abrirla, razon por la cual adopte la costumbre de tratar de cerrar la conexión y abrirla en cada función que necesitara consultar la base de datos.
ahora tendré que cambiar mi costumbre.


Puede que haya motores de bases de datos que tras un tiempo de inactividad cierren automáticamente la conexión. No sé si es el caso de sqlite, aunque a mí nunca me ha pasado. En cualquier caso, crea una rutina de conexión que abra la base de datos en caso de no estar ya abierta y asunto solucionado. Úsala cada vez que vayas a realizar una consulta (o mejor al principio del procedimiento que lance las consultas), ya que sólo abrirá la base si está desconectada. Al salir del programa, por ejemplo en el evento form_close del form principal, cierra las conexiones y listo.

Repito, nunca he tenido problemas por mantener abierta una conexión, pero sí al contrario: por cerrarlas.

Saludos

P.D. Por si acaso te sientes tentado de abrir o cerrar una conexión dentro del evento Data, quedas advertido de los efectos inesperados, casi apocalípticos que se podrían desencadenar...

Profile PM  

Page 1 of 1


  
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events

   

This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Generation Time: 0.121s (PHP: -6% SQL: 106%)
SQL queries: 23 - Debug Off - GZIP Enabled