none
No actualiza tabla de SQL SERVER enlazada a DataGridView.

    Pregunta

  • Hola, buenas tardes.

    Intento actualizar una tabla, enlazada a un DataGridView, y no lo consigo, he aplicado diferentes soluciones y no hay manera. Lo quiero actualizar sin recorrer el dataset.

    A continuación paso el último código que he encontrado por internet por si pudieran orientarme.

    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Configuration
    
    Public Class Form3
        Private cnn As New SqlConnection(AccesoBd.CadenaConexion.ConnectionString)
        Private da As New SqlDataAdapter("SELECT id_c AS 'CLAVE',id_c_c AS 'CÓDIGO POSTAL'," &
                                         "id_c_ci As 'POBLACIÓN',id_c_p AS 'PAÍS'," &
                                         "CPOSTAL AS 'CÓDIGO POSTAL', " &
                                         "POBLACION AS 'POBLACIÓN', PAIS AS 'PAÍS'," &
                                         "NOMBRE AS 'NOMBRE' " &
                                         "From ACREEDORES " &
                                         "Where (id_c=100000) Order By CPOSTAL", cnn)
        Private datas As New DataSet
        Private enlazador As New BindingSource
        Dim vfila As Integer
    
        Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Try
                Using cnn
                    Dim commandBuilder As New SqlCommandBuilder(Me.da)
                    cnn.Open()
                    MsgBox("Conexión efectuada correctamente")
                    Dim dt As New DataTable()
                    da.Fill(datas)
                    da.Fill(dt)
                    enlazador.DataSource = datas.Tables(0)
                    DGVA.DataSource = dt
                    DGVA.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                    DGVA.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
                End Using
            Catch exc As Exception
                MessageBox.Show(exc.Message)
            End Try
        End Sub
    
        Private Sub BTerminar_Click(sender As Object, e As EventArgs) Handles BTerminar.Click
            Me.Close()
        End Sub
        Private Sub DGVA_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DGVA.CellClick
            vfila = DGVA.CurrentRow.Index
            MsgBox(vfila)
            Dim vcodigo As String = Me.DGVA.Rows(e.RowIndex).Cells(1).Value.ToString
            SeleccionarCp(vcodigo)
        End Sub
    
        Public Sub SeleccionarCp(vcod As String)
            Try
                Using cnn As New SqlConnection(AccesoBd.CadenaConexion.ConnectionString)
                    Dim scon1 As String = "SELECT ID_C AS 'CLAVE',CODIGO AS 'CÓDIGO POSTAL'," &
                                          "CIUDAD AS 'POBLACIÓN',id_p AS 'PAÍS'" &
                                          "From CODIGOS_POSTALES " &
                                          "Where CODIGO = @Codigo Order By CIUDAD"
                    cnn.Open()
                    MsgBox("Conexión efectuada correctamente")
                    Dim da1 As New SqlDataAdapter(scon1, cnn)
                    da1.SelectCommand.Parameters.Add("@Codigo", SqlDbType.VarChar, 11).Value = vcod
                    Dim dt1 As New DataTable()
                    da1.Fill(dt1)
                    DGVC.DataSource = dt1
                End Using
            Catch exc As Exception
                MsgBox(exc.Message)
            End Try
        End Sub
    
        Private Sub DGVC_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DGVC.CellClick
            Dim vid As Object = DGVC.Rows(e.RowIndex).Cells(0).Value
            Dim vci As String = DGVC.Rows(e.RowIndex).Cells(2).Value.ToString
            Me.DGVA.Rows(vfila).Cells(0).Value = vid
            Me.DGVA.Rows(vfila).Cells(2).Value = vci
            Me.DGVA.Refresh()
        End Sub
    
        Private Sub BModificarA_Click(sender As Object, e As EventArgs) Handles BModificarA.Click
            DGVA.Refresh()
            da.Update(CType(enlazador.DataSource, DataTable))
        End Sub
    

    Gracias y saludos.

    viernes, 16 de septiembre de 2016 17:59

Respuestas

  • Según lo que me dices tienes que hacer un Update al registro que estas modificando algo como esto

    Public Shared Sub Actualizar(_personal As PersonalEntity)
                Using cn As SqlConnection = Conexion.Conectar("default")
                    Using cmd As SqlCommand = cn.CreateCommand()
                        cmd.CommandText = "UPDATE Personal SET Personal_id=@Personal_id, Cia_Id=@Cia_Id, Of_Id=@Of_Id, Codigo=@Codigo," &  " TI_Id=@TI_Id, NroDI=@NroDI, Nombre=@Nombre, Direccion=@Direccion," &  " Telefono=@Telefono,Estado=@Estado WHERE Personal_id=@Personal_id AND Cia_Id=@Cia_Id"
                        cmd.Parameters.AddWithValue("@Personal_id", _personal.Personal_Id)
                        cmd.Parameters.AddWithValue("@Cia_Id", _personal.Cia_Id)
                        cmd.Parameters.AddWithValue("@Of_Id", _personal.Of_Id)
                        cmd.Parameters.AddWithValue("@Codigo", _personal.Codigo)
                        cmd.Parameters.AddWithValue("@TI_Id", _personal.TI_Id)
                        cmd.Parameters.AddWithValue("@NroDI", _personal.NroDI)
                        cmd.Parameters.AddWithValue("@Nombre", _personal.Nombre)
                        cmd.Parameters.AddWithValue("@Direccion", _personal.Direccion)
                        cmd.Parameters.AddWithValue("@Telefono", _personal.Telefono)
                        cmd.Parameters.AddWithValue("@Estado", _personal.Estado)
                        cmd.ExecuteNonQuery()
    
                    End using
    
                End using
    
            End Sub
    
    

    Luego de hacer el Update tienes que llamar al metodo que te carga la grilla para que veas los cambios realizados.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    • Marcado como respuesta Ángelroso sábado, 17 de septiembre de 2016 19:12
    sábado, 17 de septiembre de 2016 16:39

Todas las respuestas

  • Hola @Ángelroso

    Deberías ser mas explicito, ¿que es lo que deseas hacer?

    AYUDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    viernes, 16 de septiembre de 2016 21:17
  • Hola, Pablo.

    Buenos días.

    Lo que pretendo es actualizar la tabla "ACREEDORES" enlazada a un DataGridView "DGVA".

    El código que pasé está copiado de una aportación, pero no me funciona.

    Saludos.

    sábado, 17 de septiembre de 2016 7:31
  • Hola @Ángelroso

    Lo que puedes hacer es primero dar de alta a los nuevos acrededore una vez que tengas eso debes cargar los datos que tienes en tu tabla Acrededores en un DataGridView una vez que tengas cargado esos datos en el DGV puedes hacer click en una fila de la grilla y llamar a otro formulario donde edites esos datos y al actualizar se refleje en la grilla.

    Puedes guiarte de este manual Operaciones CRUD


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    sábado, 17 de septiembre de 2016 15:58
  • Hola, Pedro.

    Exactamente lo que hago es de una grilla paso un valor a otra que con ese dato selecciona unos registros. Al clickear en uno de esos selecciono otro dato que su valor, a su vez, le cambio en la primera grilla. Y el problema surge al actualizar la tabla que no sé como hacerlo.

    El ejemplo concreto es: en la primera grilla hay un código postal con una población mal escrita. Selecciono ese código y le paso a la otra grilla que me va a seleccionar a su vez todo los códigos postales que tengan ese código. Reviso de entre todos las poblaciones correspondientes y selecciono la que está mal escrita en la primera grilla, clickeo y me pasa esa población a la población mal escrita de la primera grilla. Todo eso lo hace bien, el problema es actualizar la tabla con los datos cambiados en la grilla.

    No sé si me he explicado bien pues es un poco engorroso.

    Muchas gracias y saludos.

    sábado, 17 de septiembre de 2016 16:17
  • Según lo que me dices tienes que hacer un Update al registro que estas modificando algo como esto

    Public Shared Sub Actualizar(_personal As PersonalEntity)
                Using cn As SqlConnection = Conexion.Conectar("default")
                    Using cmd As SqlCommand = cn.CreateCommand()
                        cmd.CommandText = "UPDATE Personal SET Personal_id=@Personal_id, Cia_Id=@Cia_Id, Of_Id=@Of_Id, Codigo=@Codigo," &  " TI_Id=@TI_Id, NroDI=@NroDI, Nombre=@Nombre, Direccion=@Direccion," &  " Telefono=@Telefono,Estado=@Estado WHERE Personal_id=@Personal_id AND Cia_Id=@Cia_Id"
                        cmd.Parameters.AddWithValue("@Personal_id", _personal.Personal_Id)
                        cmd.Parameters.AddWithValue("@Cia_Id", _personal.Cia_Id)
                        cmd.Parameters.AddWithValue("@Of_Id", _personal.Of_Id)
                        cmd.Parameters.AddWithValue("@Codigo", _personal.Codigo)
                        cmd.Parameters.AddWithValue("@TI_Id", _personal.TI_Id)
                        cmd.Parameters.AddWithValue("@NroDI", _personal.NroDI)
                        cmd.Parameters.AddWithValue("@Nombre", _personal.Nombre)
                        cmd.Parameters.AddWithValue("@Direccion", _personal.Direccion)
                        cmd.Parameters.AddWithValue("@Telefono", _personal.Telefono)
                        cmd.Parameters.AddWithValue("@Estado", _personal.Estado)
                        cmd.ExecuteNonQuery()
    
                    End using
    
                End using
    
            End Sub
    
    

    Luego de hacer el Update tienes que llamar al metodo que te carga la grilla para que veas los cambios realizados.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    • Marcado como respuesta Ángelroso sábado, 17 de septiembre de 2016 19:12
    sábado, 17 de septiembre de 2016 16:39
  • Gracias, Pedro.

    Voy con ello.

    Saludos.

    sábado, 17 de septiembre de 2016 19:11