Guardar los datos de un datagridview en una base de datos
-
Saturday, November 06, 2010 4:56 AMNecesito 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 PMModerator
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 Subcomo 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 Subcomo 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 PMhola..,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 AMModerator
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- Proposed As Answer by Gustavo2010 Sunday, November 07, 2010 1:45 AM
- Marked As Answer by Eduardo PorteschellerMicrosoft Community Contributor, Moderator Monday, November 08, 2010 2:00 PM
-
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 AMModerator
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 PMmuy 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
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 IfSuerte!
Saludos desde Monterrey, N.L. México
Luis Escobar :D
- Edited by Luis_Escobar Monday, August 06, 2012 3:45 PM

