Guardar los datos de un datagridview en una base de datos

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

  • Saturday, November 06, 2010 4:56 AM
     
     
    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?

All Replies

  • Saturday, November 06, 2010 8:12 AM
     
     

    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
  • Saturday, November 06, 2010 12:55 PM
    Moderator
     
     Proposed

    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
    • Proposed As Answer by Gustavo2010 Sunday, November 07, 2010 1:45 AM
    •  
  • Saturday, November 06, 2010 6:32 PM
     
     

    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 ?

  • Saturday, November 06, 2010 7:21 PM
     
     
    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..!!
  • Sunday, November 07, 2010 1:17 AM
    Moderator
     
     Answered

    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
  • Sunday, November 07, 2010 1:28 AM
     
     

    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

  • Sunday, November 07, 2010 1:37 AM
    Moderator
     
     

    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
  • Sunday, November 07, 2010 1:45 AM
     
     

    Fue error mio, el codigo funciona muy bien.

     

    Gracias nuevamente.

     

    Saludos

     

     

  • Thursday, December 16, 2010 4:22 PM
     
     

    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

     

  • Monday, August 06, 2012 2:06 PM
     
     
    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.
  • Monday, August 06, 2012 3:43 PM
     
      Has Code

    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