none
Insertar filas de un datagridview en base de datos, utilizando metodologia en capas.

    Pregunta

  • Hola amigos, requiero insertar los valores que contienen las filas de un datagridview en una tabla, especificamente los id's de varios autos que pertenecen a un cliente, lo anterior utilizando la metodologia en capas, lo he intentado pero solo me registra el valor de la primera fila del datagridview, este es mi codigo:

    De antemano muchas gracias.

    stored procedure

    CREATE PROCEDURE sp_Registrar ( @id_cliente int,

    @id_auto int ) AS BEGIN BEGIN TRY IF (@id_auto IS NOT NULL) AND EXISTS(SELECT * FROM CLIENTE_AUTO WHERE id_auto=@id_auto) AND @id_auto <>'' RAISERROR('El auto ya se encuentra registrado en el sistema!,16,1) INSERT INTO CLIENTE_AUTO (id_cliente,id_auto) VALUES(@id_cliente,@id_auto) END TRY BEGIN CATCH EXEC sp_retornarError END CATCH END GO

    En datos tengo la funcion:

    Public Function Registrar(ByVal objEntidad As Entidad_AutoCliente) As Entidad_AutoCliente
        cn = objconexion.Conectar
        Dim cmd As New SqlCommand("sp_Registrar", cn)
        cmd.CommandType = CommandType.StoredProcedure
        With cmd.Parameters
            .Add("@id_cliente", SqlDbType.Int).Direction = ParameterDirection.Output
            .AddWithValue("@id_auto", objEntidad.gIdAuto)
        End With
        Try
            cn.Open()
            cmd.ExecuteNonQuery()
            objEntidad.gIdCliente = CInt(cmd.Parameters.Item("@id_cliente").Value)
        Catch ex As Exception
            Throw ex
        Finally
            cmd.Dispose()
            cmd = Nothing
            If cn.State = ConnectionState.Open Then
                cn.Close()
            End If
            cn.Dispose()
    
            cn = Nothing
        End Try
        Return objEntidad
    End Function

    En logica-negocio tengo la funcion:

     Function Registrar(ByVal ObjEntidad As Entidad_AutoCliente)
            Return objDatos.Registrar(ObjEntidad)
        End Function

    En presentacion tengo el metodo:

    Sub Grabar()
    
        Dim obj = Form_Registro
        
        Try
    
            objEntidad.gIdCliente = obj.txtIdCliente.text
    
            For x As Integer = 0 To obj.GridAutos.Rows.Count - 1
                objEntidad.gIdAuto = obj.GridAutos.Rows(x).Cells(0).Value
            Next
    
            If MessageBox.Show("¿Desea registrar los datos?", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                objEntidad = objNegocio.Registrar(objEntidad)
                IniciarConfiguracion()
            End If
    
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error al registrar los datos", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

    ScreenShot del formulario:






    • Editado Jose Alrey jueves, 12 de enero de 2017 5:27
    jueves, 12 de enero de 2017 5:26

Respuestas

  • en la función Grabar primero lees todas la fila del ComboBox y luego preguntas si desea registrar los datos. Lógicamente siempre registrara el ultimo elemento leído del ComboBox.

    Yo personalmente, primero preguntaría si desea registrar los datos, y si el usuario lo confirma, entonces dentro del bucle haría la llamada a la función de registrar.

                        

    If MessageBox.Show("¿Desea registrar los datos?", "Confirmación", _
                       MessageBoxButtons.YesNo, _
                       MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

        For x As Integer = 0 To obj.GridAutos.Rows.Count - 1

            objNegocio.Registrar(obj.GridAutos.Rows(x).Cells(0).Value)

            IniciarConfiguracion()
        Next

    End If

    Un saludo.


    jueves, 12 de enero de 2017 7:54