none
GUARDAR DATOS DE UN DATAGRIDVIEW EN LA BD RRS feed

  • Pregunta

  • HOLA BUENAS TARDES TENGO UNA DUDA,  Resulta que tengo un datagridview con varias columnas:  numero documento, cuota no, fecha vencimiento, valor cuota........y otros, Una vez  hecho unas actualizaciones de mi datagridview de algunas celdas de filas seleccionadas, debo guardarlo   en la tabla listacuotasprestamo (uso sql) , COMO LO PODRIA HACER, ME PODRIA GUIAR PARA EL PROCEDIMIENTO..

    GRACIAS POR SU COLABORACION..

    Este ha sido mi ultimo procedimiento de actualizacion,

    Private Sub Btonactualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btonactualizar.Click


            Dim row As DataGridViewRow = ListacuotasprestamoDataGridView.CurrentRow

            Textsaldocuota.Text = CStr(Textsubtotal.Text - Textimprec.Text)

            Textimpcob.Text = CStr(Textimprec.Text)

            If row IsNot Nothing Then

                row.Cells(11).Value = fechahoy.Value

                row.Cells(10).Value = Textsaldocuota.Text

                row.Cells(12).Value = Textimpcob.Text

            End If


        End Sub




    Cristina E.
    miércoles, 14 de septiembre de 2011 20:26

Respuestas

  • Hola

    En este caso en tu WHERE debes utilizar un identificador para saber el dato de quién vas a actualizar. Por ejemplo:

    WHERE CuotaNo = @CuotaNo" AND nrodocumento = @nrodocumento. De esta forma especificas que vas a hacer un cambio a la CuotaNo x del cliente con el nrodocumento y.

    Aparte de eso veo unos desfases de columnas...

    Columna 3 = CuotaNo - Bien

    Columna 10 = mora - No debería ser 8 fechacobro?

    Columna 11 = saldo - No debería ser 10?

    Columna 12 = importecobrado - Bien

    Un saludo


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    • Marcado como respuesta cristi2281 jueves, 15 de septiembre de 2011 21:12
    jueves, 15 de septiembre de 2011 17:31

Todas las respuestas

  • pero en el codigo que poens no esta involucrada ninguna base de datos, alli solo vuelcas la info de controles al grid

    deberias apclair algo como esto

    http://social.msdn.microsoft.com/Forums/es/vbes/thread/3c2637db-0d8d-4a70-95c8-ee6165ee821d

    http://social.msdn.microsoft.com/Forums/es/vbes/thread/b9cf9b23-5fb0-4f58-8c2d-6d158f7f2887

     

    o sea usas un For Each para recorrer cada row del grid armando el INSERT que actuazlai los campos de la db

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 15 de septiembre de 2011 4:09
  • Hola buen día Leandro ,

    Gracias por tu respuesta,

    Como te habia comentado solo quiero guardar las actualizaciones hechas   en esta tabla de  algunos campos  de las filas seleccionadas, ya que esta tabla la alimenta otro form prestamos, por esa razon ya viene con info de algunos campos(nrodocumento, cedula, cuotaNo, Capital, interes, fechavencimiento, cuotamensual, diasmora, mora).

    la verdad ya habia trabajado ASI  con el insert, :

    Private Sub Btonguardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btonguardar.Click

                  Using conn As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\FONSOCAM.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

                conn.Open()

               Dim sql As String = "INSERT INTO  listacuotasprestamo(fechacobro, saldo, importecobrado)VALUES (@fechacobro, @saldo, @importecobrado)"

               Dim cmd As New SqlClient.SqlCommand(sql, conn)

              For Each row As DataGridViewRow In ListacuotasprestamoDataGridView.Rows

                   cmd.Parameters.AddWithValue("@fechacobro", Convert.ToDateTime(row.Cells(11).Value))

                    cmd.Parameters.AddWithValue("@saldo", Convert.ToInt32(row.Cells(10).Value))

                    cmd.Parameters.AddWithValue("@importecobrado", Convert.ToInt32(row.Cells(12).Value))

                    cmd.ExecuteNonQuery()

                Next

                MessageBox.Show("Info. guardada correctamente")

            End Using

     

        End Sub

    pero me vota este error,

    No se puede insertar el valor NULL en la columna 'nrodocumento', tabla 'C:\USERS\CRISTINA\DOCUMENTS\VISUAL STUDIO 2005\PROJECTS\FONSOCAM\FONSOCAM\BIN\DEBUG\FONSOCAM.MDF.dbo.listacuotasprestamo'. La columna no admite valores NULL. Error de INSERT.

    Se terminó la instrucción.


    Ahora Teniendo en cuenta este enlace de validar valores nulos:

    http://social.msdn.microsoft.com/Forums/es/vbes/thread/3c2637db-0d8d-4a70-95c8-ee6165ee821d

    tengo esto:

    Using conn As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\FONSOCAM.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

                conn.Open()

     

                Dim sql As String = "INSERT INTO  listacuotasprestamo(fechacobro, saldo, importecobrado)VALUES (@fechacobro, @saldo, @importecobrado)"

     

                Dim cmd As New SqlClient.SqlCommand(sql, conn)

     

                For Each row As DataGridViewRow In ListacuotasprestamoDataGridView.Rows

     

                    If String.IsNullOrEmpty(row.Cells("nrodocumento").Value) Or _

                         String.IsNullOrEmpty(CStr(row.Cells("cedula").Value)) Or _

                         String.IsNullOrEmpty(CStr(row.Cells("cuotaNo").Value)) Or _

                         String.IsNullOrEmpty(CStr(row.Cells("Capital").Value)) Or _

                         String.IsNullOrEmpty(CStr(row.Cells("interes").Value)) Or _

                         String.IsNullOrEmpty(CStr(row.Cells("fechavencimiento").Value)) Or _

                         String.IsNullOrEmpty(CStr(row.Cells("cuotamensual").Value)) Or _

                         String.IsNullOrEmpty(CStr(row.Cells("diasmora").Value)) Or _

                         String.IsNullOrEmpty(CStr(row.Cells("mora").Value)) Then

     

                        Continue For

                    End If

                    cmd.Parameters.AddWithValue("@fechacobro", Convert.ToDateTime(row.Cells(11).Value))

                    cmd.Parameters.AddWithValue("@saldo", Convert.ToInt32(row.Cells(10).Value))

                    cmd.Parameters.AddWithValue("@importecobrado", Convert.ToInt32(row.Cells(12).Value))

     

                    cmd.ExecuteNonQuery()

                Next

     

                MessageBox.Show("Info. guardada correctamente")

            End Using

     

        End Sub

    y me vota esta excepcion :

    NO se si lo estoy haciendo bien..

    Muchas gracias por tu colaboracion..


    Cristina E.
    jueves, 15 de septiembre de 2011 13:25
  • Hola

    Te comento un poco:

    1) No se puede insertar el valor NULL en la columna 'nrodocumento', tabla 'C:\USERS\CRISTINA\DOCUMENTS\VISUAL STUDIO 2005\PROJECTS\FONSOCAM\FONSOCAM\BIN\DEBUG\FONSOCAM.MDF.dbo.listacuotasprestamo'. La columna no admite valores NULL. Error de INSERT.Se terminó la instrucción.

    Esto sucede porque no estás pasando un parámetro a la columna nrodocumento por ende el toma null como predeterminado y la columna no admite null.

     

    2) No se puede encontrar la columna denominada nrodocumento. Nombre del párametro: columnName

    Esto pasa porque tu datagridview no tiene una columna llamada nrodocumento.

     

    Conclusión: agrega el parámetro de nrodocumento para que no te tire el error 1 y agrega la columna nrodocumento al datagridview para que no tengas el 2 error.

    Un saludo


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    jueves, 15 de septiembre de 2011 13:43
  • Hola Antonio gracias por tu respuesta,

    con respecto a tu respuesta 2,  claro que el datagrid tiene todas esas columnas que puse en el anterior enunciado, eso es lo raro porq me sale ese error.

     

    Como te habia comentado solo quiero guardar las actualizaciones hechas   en este datagrid de  algunos campos  de las filas seleccionadas, (saldo, fechacobro, importecobrado) ya que esta tabla la alimenta otro form prestamos, por esa razon ya viene alimentada con info de los otros campos(nrodocumento, cedula, cuotaNo, Capital, interes, fechavencimiento, cuotamensual, diasmora, mora).

    Que proceso debo hacer?

    Gracias..


    Cristina E.
    • Editado cristi2281 jueves, 15 de septiembre de 2011 14:14
    jueves, 15 de septiembre de 2011 14:13
  • solo quiero guardar las actualizaciones hechas en este datagrid de algunos campos de las filas seleccionadas, (saldo, fechacobro, importecobrado) ya que esta tabla la alimenta otro form prestamos, por esa razon ya viene alimentada con info de los otros campos

    Si estas son actualizaciones por que usas INSERT? no deberías usar UPDATE?

    Dim sql As String = "UPDATE listacuotasprestamo _
                                   SET fechacobro = @fechacobro, saldo = @saldo,  = @importecobrado _
                                   WHERE nrodocumento = @nrodocumento"



    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    jueves, 15 de septiembre de 2011 14:26
  • Hola mira he probado este codigo me actualiza bien los valores de la fila seleccionada pero al darle aceptar al boton guardar me actualiza  todos las celdas de las columnas (saldo, fechacobro, importecobrado), es que repito solo quiero que me guarde los valores de la fila seleccionada, qué le debo modificar?

    mira el codigo:

     

     

    Private Sub Btonguardarcobro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btonguardarcobro.Click

     

     

           Dim row As DataGridViewRow = ListacuotasprestamoDataGridView.CurrentRow

     

            Textsaldocuota.Text = CStr(Textsubtotal.Text - Textimprec.Text)

            Textimpcob.Text = CStr(Textimprec.Text)

     

            If row IsNot Nothing Then

     

                row.Cells(11).Value = fechahoy.Value

                row.Cells(10).Value = Textsaldocuota.Text

                row.Cells(12).Value = Textimpcob.Text

            End If

            Using conn As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\FONSOCAM.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

                conn.Open()

     

                Dim sql As String = "UPDATE listacuotasprestamo SET fechacobro = @fechacobro, saldo = @saldo, importecobrado= @importecobrado WHERE nrodocumento = @nrodocumento"

     

                Dim cmd As New SqlClient.SqlCommand(sql, conn)

     

               cmd.Parameters.AddWithValue("@nrodocumento", (row.Cells(1).Value))

                cmd.Parameters.AddWithValue("@fechacobro", Convert.ToDateTime(row.Cells(11).Value))

                cmd.Parameters.AddWithValue("@saldo", Convert.ToInt32(row.Cells(10).Value))

                cmd.Parameters.AddWithValue("@importecobrado", Convert.ToInt32(row.Cells(12).Value))

     

                cmd.ExecuteNonQuery()

     

                MessageBox.Show("Info. guardada correctamente")

            End Using

    PLEASE AYUDA!!

    GRACIAS POR TU COLABORACION Y TIEMPO!!

     


    Cristina E.
    jueves, 15 de septiembre de 2011 16:15
  • Hola Cristina

    Corrígeme si me equivoco: tu tienes un dato en tu BD y quieres agregar uno nuevo pero con el mismo nrodocumento, cedula, cuotaNo, Capital, interes, fechavencimiento, cuotamensual, diasmora, mora pero diferente fechacobro, saldo e importecobrado?

    Si estoy equivocado entonces ilustra lo que quieres hacer porque la verdad no comprendo lo que quieres hacer.

    Un saludo


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    jueves, 15 de septiembre de 2011 16:35
  • SI.. mira este estoy trabajando sobre este datagridview, lo que quiero es que al darle click en guardar cobro,  me guarde los datos que actualicé de esta fila seleccionada: los campos: fecha cobro, saldo, importecobrado, es decir me guarde el cobro, los demas datos ya vienen de otro form que  ha calculado las cuotas en el datagrid. 

     

    del codigo anterior le modifique:

    la sentencia where

    Using conn As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\FONSOCAM.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

                conn.Open()

     

                Dim sql As String = "UPDATE listacuotasprestamo SET fechacobro = @fechacobro, saldo = @saldo, importecobrado= @importecobrado WHERE CuotaNo = @CuotaNo"

     

                Dim cmd As New SqlClient.SqlCommand(sql, conn)

     

                cmd.Parameters.AddWithValue("@CuotaNo", (row.Cells(3).Value))

                cmd.Parameters.AddWithValue("@fechacobro", Convert.ToDateTime(row.Cells(11).Value))

                cmd.Parameters.AddWithValue("@saldo", Convert.ToInt32(row.Cells(10).Value))

                cmd.Parameters.AddWithValue("@importecobrado", Convert.ToInt32(row.Cells(12).Value))

     

                cmd.ExecuteNonQuery()

    ahora solo me guarda el valor de la celda saldo de la fila seleccionada, la fechacobro , importerecibido no me los guarda.

    GRACIAS POR TU COLABORACION!


    Cristina E.
    jueves, 15 de septiembre de 2011 17:00
  • Hola

    En este caso en tu WHERE debes utilizar un identificador para saber el dato de quién vas a actualizar. Por ejemplo:

    WHERE CuotaNo = @CuotaNo" AND nrodocumento = @nrodocumento. De esta forma especificas que vas a hacer un cambio a la CuotaNo x del cliente con el nrodocumento y.

    Aparte de eso veo unos desfases de columnas...

    Columna 3 = CuotaNo - Bien

    Columna 10 = mora - No debería ser 8 fechacobro?

    Columna 11 = saldo - No debería ser 10?

    Columna 12 = importecobrado - Bien

    Un saludo


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    • Marcado como respuesta cristi2281 jueves, 15 de septiembre de 2011 21:12
    jueves, 15 de septiembre de 2011 17:31
  • ok muchas gracias problema solucionado..

    Era ademas que en el Datapropertyname no tenia ninguno  valor seleccionado en las celdas q no me aparecia nada: fechacobro e importecobrado..

    Gracias de nuevo por tu colaboracion.


    Cristina E.
    jueves, 15 de septiembre de 2011 21:14