Hola a tod@s,
Estoy haciendo una aplicación con Visual Basic 2010 Express. En dicha aplicación tengo un formulario con un datagridview, un textbox y un botón. A parte en un base de datos MySQL tengo varias tablas (TABLA1, TABLA2, TABLA3, TABLA4, TABLA5, etc.)
Con el evento botón_click enlazo el datagridview con la tabla de la base de datos MySQL que tiene el nombre que me aparece en el textbox (el cual puedo ir cambiando mediante otro evento). Es decir, según el nombre de la tabla que aparece en el textbox y accionando el botón consigo que el datagridview1 se enlace con los datos de la tabla que me interesa.
Para el caso de la TABLA1, esto lo consigo mediante el siguiente código.
Private mysqldataadapterTABLA1 As MySqlDataAdapter
Private WithEvents xsTABLA1 As New BindingSource
Dim ms As New MySqlConnection("server= localhost; user id = root; password =; database = PRIMERA")
Private Sub cargar_registrosTABLA1(ByVal sql As String, ByVal dv As DataGridView)
Try
MysqldataadapterTABLA1 = New MySqlDataAdapter(sql, ms)
Dim mysqlcommandbuilder As New MySqlCommandBuilder(mysqldataadapterTABLA1)
Dim tablaTABLA1 As New DataTable()
MysqldataadapterTABLA1.Fill(tablaTABLA1)
XsTABLA1.DataSource = tablaTABLA1
bEdit = False
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Textbox1.text = “Tabla 1” Then
cargar_registrosTABLA1("select * from TABLA1", datagridview1)
datagridview1.DataSource = xsTABLA1
End if
End sub
Seguidamente, mediante otro botón, lo que hago es insertar una fila en el datagridview1 (a continuación de la fila que tengo seleccionada) y en la fila que he creado nueva introduzco datos de un tabla llamada TABLADATOS (con las mimas columnas que la TABLA1).
Esto lo hago con el siguiente código.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim dt As DataTable = DirectCast(xs.TABLA1, DataTable)
Dim row As DataRow = dt.NewRow
Dim con As New MySqlConnection("server= localhost; user id = root; password =; database = PRIMERA")
Dim comando As New MySqlCommand("Select * from TABLADATOS where referencia = '" & DataGridView1.CurrentRow.Cells(1).Value & "'", con)
Dim da As MySqlDataReader
con.Open()
da = comando.ExecuteReader()
da.Read()
With row
.Item("COLUMNA1") = da.Item("1")
.Item("COLUMNA2") = da.Item("2")
.Item("COLUMNA5") = da.Item("3")
.Item("COLUMNA6") = da.Item("4")
End With
Dim pos As Int32 = xs2.Position
dt.Rows.InsertAt(row, pos + 1)
con.Close()
End Sub
El problema que no consigo solucionar es el siguiente:
Según con que tabla tengo cargado el datagridview1, cuando necesito añadir la fila nueva, tengo que escribir el segundo código (PRIVATE SUB BUTTON2_CLICK) tantas veces como tablas tengo, cambiado el valor de la propiedad BINDINGSOURCE (XS.TABLA1) por el que corresponde a cada tabla.
Mi idea es que en un textbox2, aparezca el nombre del bindingsource correspondiente al nombre de la tabla que aparece en textbox1. Esto lo he conseguido, pero a la hora de hacer la siguiente sustitución:
Dim dt As DataTable = DirectCast(textbox2.text, DataTable)
Dim pos As Int32 = textbox2.text.Position
me sale el error "Datasource no es miembro de string".
¿Alguien ha tenido el mismo problema alguna vez? ¿Podrían ayudarme a solucionarlo?
Gracias y saludos,