Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Mary en 10 de Diciembre 2016, 21:23
-
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,
-
Hola,
he conseguido solucionar el problema. He conectado el datagridview a la table de la base de datos MySQL sin utilizar bindingsource. De este modo he podido cargar el datagridview y, además, insertar filas, que es lo que estaba buscando.
A continuación escribo el código para enlazar el datagridview a la table MySQL
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim sql As String
Dim cm As MySqlCommand
Dim da As MySqlDataAdapter
Dim ds As DataSet
Dim ms1 As New MySqlConnection("server= localhost; user id = root; password =; database = PRIMERA")
ms1.Open()
sql = "SELECT * FROM Table1"
cm = New MySqlCommand()
cm.CommandText = sql
cm.CommandType = CommandType.Text
cm.Connection = ms1
da = New MySqlDataAdapter(cm)
ds = New DataSet()
da.Fill(ds)
Datagridview1.DataSource = ds.Tables(0)
ms1.close()
End sub
Y a continuación, como insertar una fila en el datagridview y rellenar la fila con los valores de la table MySQL TABLADATOS.
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim ms1 As New MySqlConnection("server= localhost; user id = root; password =; database = PRIMERA")
ms1.Open()
Dim dt As DataTable = DirectCast(datagridview1.DataSource, DataTable)
Dim drNewRow As DataRow = dt.NewRow()
Dim i As Integer
i = datagridview1.CurrentRow.Index
dt.Rows.InsertAt(drNewRow, i + 1)
Dim comando As New MySqlCommand("Select * from TABLADATOS where referencia = '" & Datagridview1.CurrentRow.cells(1).value & "'", ms1)
Dim da As MySqlDataReader
da = comando.ExecuteReader()
If da.Read Then
drNewRow("COLUMNA1") = Convert.ToString(da("1"))
drNewRow("COLUMNA2") = Convert.ToString(da("2"))
drNewRow("COLUMNA3") = Convert.ToString(da("3"))
drNewRow("COLUMNA4") = Convert.ToString(da("4"))
End if
End Sub
Saludos.
-
Hola Mary, gracias por exponer cómo resolviste el problema. Es una referencia que puede servir de ayuda a otras personas a las que le surja el mismo problema.
Saludos.