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
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
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?