Autor Tema: Datasource no es miembro de string bindingsource datagridview base datos MySql  (Leído 2588 veces)

Mary

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
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.


Código: [Seleccionar]
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.

Código: [Seleccionar]
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,
« Última modificación: 21 de Diciembre 2016, 19:44 por Alex Rodríguez »

Mary

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Re:Utilizar texto en TEXTBOX como bindingsource.
« Respuesta #1 en: 17 de Diciembre 2016, 16:58 »
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
Código: [Seleccionar]
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.

 
Código: [Seleccionar]
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.

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
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.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".