none
Agregar fiila a datagridwien

    Pregunta

  • Hola buenos dias: Saludos, quisiera saber como puedo agregar fila a un datagridwien enlazado a un base de datos que esta en el proyecto, para ello utilizo 2 texbox y un button lo que pretendo hacer es que cuando oprima  el botón me añada una fila al final del datagridwien. Y las guarde o las grave, las columnas son columna1 Nombre columna2 Clave. Podrían a orientarme en esto? como lo ago.   

    martes, 18 de abril de 2017 7:57

Respuestas

  • Te da ese error porque tienes el DataGridView enlazado a un BindingSource. En ese caso el código es casi igual pero el datrasource lo debes convertir a un BindingSource:

    Dim bsdata As BindingSource = DirectCast(DataGridView1.DataSource, BindingSource) Dim drv As DataRowView = DirectCast(bsdata.AddNew(), DataRowView) drv.BeginEdit() drv.Row.BeginEdit() drv.Row(0) = TextBox1.Text
    drv.Row(1) = TextBox2.Text

    drv.Row.EndEdit() drv.DataView.Table.Rows.Add(drv.Row)



    Saludos, Javier J

    martes, 18 de abril de 2017 16:45

Todas las respuestas

  • Si el datagridview está enlazado solo tiene que agregar el registro en la tabla y actualizarlo:

    Dim Dt As DataTable = DirectCast(DataGridView1.DataSource, DataTable)
    Dim nuevaFila As DataRow = Dt.NewRow()
    
    nuevaFila.Item(0) = TextBox1.Text
    nuevaFila.Item(1) = TextBox2.Text
    
    Dt.Rows.Add(nuevaFila)

    Saludos, Javier J


    martes, 18 de abril de 2017 12:22
  • Hola sr. Javier gracias por tu respuesta, Aplique  el código tal como me aconsejaste,  pero aun me sigue dando error y no se por que. El erro es este               Información adicional: No se puede convertir un objeto de tipo 'System.Windows.Forms.BindingSource' al tipo 'System.Data.DataTable'. Como puedo solucionar esto
    martes, 18 de abril de 2017 13:36
  • Hola

    Eso es debido a que el datagridview enlaza directamente de un objeto tipo BindingSource y no de un Datatable, y a la hora de hacer el Cast, pues no se puede porqué son dos tipos distintos.

    Este error ha dado una pista buenísima, ya que ahora sabemos que el datagridview bebe de un BindingSource, y el BindingSource tiene un método llamado AddNew(), que lo que hace es añadir una fila automaticamente. Y como el DatagridView está enlazado, lo único que has de hacer es un "Update" (o incluso creo que ni eso) y aparecerá la fila automaticamente.

    Por ejemplo, así sería el código del botón:

    Private Sub btnAñadirFila_Click(sender as Object, e as EventArgs) handles btnAñadirFila.Click
         BindingSource1.AddNew()
    End Sub

    Yo creo que con esto te tendría que funcionar.

    Ya dirás.

    Saludos!

    martes, 18 de abril de 2017 14:03
  • Hola sr. Ferran: Gracias aplique tu consejo y efectivamente Añade una nueva fila es estupendo, pero como dije mas arriba como hago para que el texto escrito en los 2 textbox se añada ala fila recién creada y los grave o guarde. Gracias de nuevo muchas gracias espero pueda ayudarme.
    martes, 18 de abril de 2017 14:31
  • Hola Andrés7722

    Aplica esto para agregar a tu columna, luego lo guardas en tu base de datos:

    Dim valor As String = Textbox1.text.trim() & Textbox2.text.trim()
    datagridview1.rows.add(valor)
    Sldos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.



    martes, 18 de abril de 2017 14:35
  • Hola Brayan: continua dándome el error este              
    Excepción no controlada del tipo 'System.InvalidOperationException' en System.Windows.Forms.dll
    Información adicional: No se pueden agregar filas mediante programación a la colección de filas de DataGridView cuando el control está enlazado a datos. te pongo el código tal como lo tengo ahora mismo
      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            JUGADORESBindingSource.AddNew()
            Dim valor As String = TextBox1.Text.Trim() & TextBox2.Text.Trim()
            JUGADORESDataGridView.Rows.Add(TextBox1.Text.Trim(), TextBox2.Text.Trim())
            JUGADORESDataGridView.Rows.Add(valor)
        End Sub

    martes, 18 de abril de 2017 14:55
  • Andrés7722

    no me había percatado de tu enlace de datos, de ninguna manera podrás añadir si ya tienes un enlace. 

    Lo que debes hacer es antes de llenar tu grid, enviarle los datos del textbox. 

    Saludos.


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    martes, 18 de abril de 2017 15:07
  • Hola de nuevo Brayan: soy un poco torpe para esto de la grilla, como  enviar  los datos de los tetbox ?, como seria el código, perdóname no tengo ni  idea como hacer esto. Podrías poner un ejemplo??  Gracias muchas gracias

    martes, 18 de abril de 2017 15:41
  • Hola Andrés7722

    Descuida, todos los días seguimos aprendiendo.. te recomiendo echarle un ojo a la documentación:

    Cómo: Agregar una columna independiente a un control DataGridView de formularios Windows Forms enlazado a datos

    Inténtalo.

    Saludos.


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    martes, 18 de abril de 2017 15:51
  • Te da ese error porque tienes el DataGridView enlazado a un BindingSource. En ese caso el código es casi igual pero el datrasource lo debes convertir a un BindingSource:

    Dim bsdata As BindingSource = DirectCast(DataGridView1.DataSource, BindingSource) Dim drv As DataRowView = DirectCast(bsdata.AddNew(), DataRowView) drv.BeginEdit() drv.Row.BeginEdit() drv.Row(0) = TextBox1.Text
    drv.Row(1) = TextBox2.Text

    drv.Row.EndEdit() drv.DataView.Table.Rows.Add(drv.Row)



    Saludos, Javier J

    martes, 18 de abril de 2017 16:45
  • Hola Javier buenas tarde tu ultima sugerencia funciona a tope pero que muy bien MIL GRACIAS ya me agrega la fila y las rellena con los textbox, solo hay un problema que al cerrar el formulario no las guarda se pierden y cuando abro el formulario no hay nada desaparecen Pudes indicarme como lo hago para guardar la fila recién creada?? gracias de nuevo
    martes, 18 de abril de 2017 17:09