none
Guardar los datos de un datagridview en una base de datos

    Pregunta

  • Necesito guardar todos los datos de un datagridview en sql server, el grid se va llenando de acuerdo a un formulario , por ejemplo el formulario empleado tiene x numero de campos (nombre, apellido, direccion, etc), y un boton agregar. Al presionar el boton agregar , los datos del formulario se agregan al datagridview , esto se repite con los empleados que uno necesite, luego necesito guardar el grid completo y lo estoy haciendo con un foreach pero me guarda solamente la primera fila del datagrid.. alguien sabe alguna forma no muy complicada de guardar todos los datos del datagridview?
    sábado, 06 de noviembre de 2010 4:56

Respuestas

  • hola

    podrias agregar una validacion para que esto no suceda, por ejemplo si sabes que las filas se requiere el campo id o nombre, o cualquier otro, simplemente validas que este tenga informacion, sino lo tiene entonces no lo grabas

    como imaginaras ese ultimo campo no tendra informacion, por lo tanto no se persite

     

    For Each row As DataGridViewRow In dataGridView1.Rows

        If String.IsNullOrEmpty(CStr(row.Cells("Nombre").Value)) Or _
            String.IsNullOrEmpty(CStr(row.Cells("Nombre").Value))
           
            Continue
           
        End If
       
        cmd.Parameters.Clear()
      
        cmd.Parameters.AddWithValue("@nombre", CStr(row.Cells("Nombre").Value))
        cmd.Parameters.AddWithValue("@apellido", CInt(row.Cells("Apellido").Value))

        cmd.ExecuteNonQuery()
    Next

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 07 de noviembre de 2010 1:17

Todas las respuestas

  • Yo te recomiendo que hagas lo siguiente:

    1º Cuando pulses en el boton agregar haces las inserciones en la base de datos

    2º Una vez realizadas las inserciones, asocias el datasource del datagridview a la tabla con los cambios que acabas de realizar. Así tendrás el DataGridview actualkizado en todo momento y además no tienes que hacer ningún bucle para guardar los datos.

     

    Salu2


    nunca te acostarás sin saber una cosa más
    sábado, 06 de noviembre de 2010 8:12
  • hola

    el codigo que usas para insertar los registros en la tabla es similar a este

    Private Sub btnInsert_Click(sender As Object, e As EventArgs)

        If dataGridView1.Rows.Count = 0 Then
            Return
        End If


        Using conn As New SqlConnection("<connection string>")
            conn.Open()
           
            Dim query As String = "INSERT INTO NombreTabla (nombre, apellido) VALUES (@nombre, @apellido)"
            Dim cmd As New SqlCommand(query, conn)
               
            For Each row As DataGridViewRow In dataGridView1.Rows

                cmd.Parameters.Clear()
               
                cmd.Parameters.AddWithValue("@nombre", CStr(row.Cells("Nombre").Value))
                cmd.Parameters.AddWithValue("@apellido", CInt(row.Cells("Apellido").Value))

                cmd.ExecuteNonQuery()
            Next
        End Using
        
    End Sub

    como veras alli recorro el datagridview he inserto las filas usando parametros en la query que inserta

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Gustavo2010 domingo, 07 de noviembre de 2010 1:45
    sábado, 06 de noviembre de 2010 12:55
  • hola

    el codigo que usas para insertar los registros en la tabla es similar a este

    Private Sub btnInsert_Click(sender As Object, e As EventArgs)

        If dataGridView1.Rows.Count = 0 Then
            Return
        End If


        Using conn As New SqlConnection("<connection string>")
            conn.Open()
           
            Dim query As String = "INSERT INTO NombreTabla (nombre, apellido) VALUES (@nombre, @apellido)"
            Dim cmd As New SqlCommand(query, conn)
               
            For Each row As DataGridViewRow In dataGridView1.Rows

                cmd.Parameters.Clear()
               
                cmd.Parameters.AddWithValue("@nombre", CStr(row.Cells("Nombre").Value))
                cmd.Parameters.AddWithValue("@apellido", CInt(row.Cells("Apellido").Value))

                cmd.ExecuteNonQuery()
            Next
        End Using
        
    End Sub

    como veras alli recorro el datagridview he inserto las filas usando parametros en la query que inserta

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    Hola,

     

    Andaba buscando algo similar, lo adapté y funcion bien,

     

    Una duda como hago para que no guarde la ultima fila que esta en blanco ?

    sábado, 06 de noviembre de 2010 18:32
  • hola..,en el datagridview existe una prpiedad que se llama addcolumn..,creo,no recuerdo bien el nombre..,con eso..eliminas ese reglon en blanco que parece por defecto..,exitos..!!
    sábado, 06 de noviembre de 2010 19:21
  • hola

    podrias agregar una validacion para que esto no suceda, por ejemplo si sabes que las filas se requiere el campo id o nombre, o cualquier otro, simplemente validas que este tenga informacion, sino lo tiene entonces no lo grabas

    como imaginaras ese ultimo campo no tendra informacion, por lo tanto no se persite

     

    For Each row As DataGridViewRow In dataGridView1.Rows

        If String.IsNullOrEmpty(CStr(row.Cells("Nombre").Value)) Or _
            String.IsNullOrEmpty(CStr(row.Cells("Nombre").Value))
           
            Continue
           
        End If
       
        cmd.Parameters.Clear()
      
        cmd.Parameters.AddWithValue("@nombre", CStr(row.Cells("Nombre").Value))
        cmd.Parameters.AddWithValue("@apellido", CInt(row.Cells("Apellido").Value))

        cmd.ExecuteNonQuery()
    Next

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 07 de noviembre de 2010 1:17
  • Sigo sin poder guardar, ya que la última fila queda en blanco y da error la BD por los PK y FK.

     

    Alguna forma para poder eliminar la ultima fila,

     

    La opción cambiar a false AllowUserToAddRows no me sirve ya que la grilla se crece a medida que se ingresan datos

    domingo, 07 de noviembre de 2010 1:28
  • hola

    pero estas validando todos los campos ?

    si tienes uno que tiene una PK con otra tabla debes validar que esta tenga un vlaor correcto, sino simpre fallara al insertar

    valida que la celda de la PK tiene valor, y si lo tiene que exista en la tabla de relacion

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 07 de noviembre de 2010 1:37
  • Fue error mio, el codigo funciona muy bien.

     

    Gracias nuevamente.

     

    Saludos

     

     

    domingo, 07 de noviembre de 2010 1:45
  • Hola a todos.

    nuevamente nuestro compañero leandro me ha sacado de aprietos, tenia un problema igual con el datagridview que si faltaba un campo  sin registrar en la grilla me mandaba un error ,pero con su explicación ya me sirve, muchas gracias leandro por tus explicaciones

     

    jueves, 16 de diciembre de 2010 16:22
  • muy buenos dia podrian ayudarme, tengo un problema con en datagridview, al conectarme con una consulta que tengo en SQL2008 aparece la informacion repetida en el datagridview.
    lunes, 06 de agosto de 2012 14:06
  • Hola buenos dias Ramelia:

    Antes que nada,  creo que iniciar una nueva pregunta te hubiera traido respuestas mas rapido :D

    Ahora, imagino que estas llenando un DataTable de un DataSet con los datos de tu consulta, para que al momento de realizar una nueva consulta no se te "dupliquen" los resultados...debes de limpiar primero el DGV y establecer su DataSource en Nothing:

    'Si el DGv contiene registros entonces que limpie
    If DataGridView1.Rows.Count > 0 Then
    'data_set es el nombre de tu DataSet "Nombre_datatable" el nombre de tu DataTable
    data_set.Tables("Nombre_datatable").Rows.Clear()
    DataGridView1.DataSource = Nothing
    DataGridView1.Rows.Clear()
    End If
    Suerte!

    Saludos desde Monterrey, N.L. México

    Luis Escobar :D




    lunes, 06 de agosto de 2012 15:43
  • hola

    podrias agregar una validacion para que esto no suceda, por ejemplo si sabes que las filas se requiere el campo id o nombre, o cualquier otro, simplemente validas que este tenga informacion, sino lo tiene entonces no lo grabas

    como imaginaras ese ultimo campo no tendra informacion, por lo tanto no se persite

     

    For Each row As DataGridViewRow In dataGridView1.Rows

        If String.IsNullOrEmpty(CStr(row.Cells("Nombre").Value)) Or _
            String.IsNullOrEmpty(CStr(row.Cells("Nombre").Value))
           
            Continue
           
        End If
       
        cmd.Parameters.Clear()
      
        cmd.Parameters.AddWithValue("@nombre", CStr(row.Cells("Nombre").Value))
        cmd.Parameters.AddWithValue("@apellido", CInt(row.Cells("Apellido").Value))

        cmd.ExecuteNonQuery()
    Next

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Hola, necesito ayuda , yo necesito guardar los datos que están en mi DataGridView en una tabla nueva que se este creando al momento en un servidor que yo quiera, pero el detalle esta en que quiero q sea en una tabla nueva y q los campos sean los que están en el datagridview y no que este predeterminado, puesto que el datagridview lo lleno de cualquier tabla de Excel. Agradecería muchísimo su ayuda!

    Lizeth Puch

    jueves, 13 de junio de 2013 20:46
  • Hola leandro, tengo un datagridview y use este codigo en un boton para guardar y funciona pero lo que yo necesito es que la informacion de mi datagridview se guarde directamente en una tabla de mi base de datos SQL sin usar un boton.

    Me puedes dar un ejemplo o que es lo que me falta??

    Saludos

    viernes, 10 de enero de 2014 16:32