Jump to content

DataGridView


Pica1958

Recommended Posts

Tenho tabela com 3 campos poe exemplo (strCodigo, strDescrição, intOrdem) 

strCodigo é tipo char e é chave da tabel

strDescriao tipo char

intOrdem é int, guarda a ordem na tabela.

Carrego um dataset (ds) através do SqlDataAdapter e inicio um SqlCommandBuilder.

Atribuo ao datagridview.DataSource=ds

Seleciono uma linha do datagridview e clico num botão para executar uma alteração em algumas linhas no campo intOrdem

Quando faço o  update  da tabela, os dados são atualizados exceto  o registo da linha que estava selecionada.

Já tentei, CurrentCell = Nothing , já tentei tudo e não consigo ver onde está o problema.

Nunca atualiza a linha que estava selecionada.

 

Link to comment
Share on other sites

Obrigado pela resposta.

Segue um exemplo onde se pode ver o meu problema (não faz update da linha selecionada)
Neste exemplo apenas se pretende trocar a ordem da linha selecionada com a linha de cima.
Como não faz o update da linha selecionada, ficam as duas linhas com o mesmo valor no campo ordem.


O form tem 2 datagridview, uma com os dados e a outra apenas para ver as linhas afetadas (GetChanges())
e um botão para alterar a ordem com o registo de cima.
Pode ver-se que apesar de na dgv a troca estar efetuada, esta não é considerada para o update.

Segue o exemplo:


 Private Sub frmDescricaoCodigos_Load(sender As Object, e As EventArgs) Handles Me.Load

        Cursor.Current = Cursors.WaitCursor

        cConAux = New SqlConnection
        cConAux.ConnectionString = sMyConStringCodigos

        Try
            cConAux.Open()
        Catch ex As Exception
            Cursor.Current = Cursors.Default
            MsgBox("Erro na ligação à vase de dados." & vbLf & "Verifique a configuração.", MsgBoxStyle.Critical, "Ligação ao servidor...")
            bLogSQL = False
            Exit Sub
        Finally
            If cConAux.State = ConnectionState.Open Then cConAux.Close()
        End Try

        Cursor.Current = Cursors.Default

        LerCodigos()
    End Sub

 Private Sub LerCodigos()
        Dim sSQL As String

        Cursor.Current = Cursors.WaitCursor
        sSQL = "SELECT strCodigo, strDescricao, intOrdem  FROM Codigos_CAB " _
            & "ORDER BY intOrdem"

        da = New SqlDataAdapter(sSQL, cConAux)

        ds = New DataSet
        'cb = New SqlCommandBuilder(da)

        Try
            da.Fill(ds, "Dados")
        Catch ex As Exception
            Cursor.Current = Cursors.Default
            MsgBox(ex.Message)
            Exit Sub
        End Try

        Dgv.DataSource = ds.Tables("Dados")
        ' ConfigDados()
        da.AcceptChangesDuringUpdate = True
        cb = New SqlCommandBuilder(da)

        Cursor.Current = Cursors.Default
    End Sub

 Private Sub cmdCima_Click(sender As Object, e As EventArgs) Handles cmdCima.Click
        Dim iIndexRef As Int16
        Dim iOrdem As Int16

        If IsNothing(Dgv.CurrentRow) Then
            MsgBox("Tem de seleccionar uma linha", MsgBoxStyle.Exclamation)
            Exit Sub
        End If

        iIndexRef = Dgv.CurrentRow.Index

        If iIndexRef = 0 Then Exit Sub

        iOrdem = Dgv.Rows(iIndexRef - 1).Cells("intOrdem").Value
        Dgv.Rows(iIndexRef - 1).Cells("intOrdem").Value = Dgv.Rows(iIndexRef).Cells("intOrdem").Value
        Dgv.Rows(iIndexRef).Cells("intOrdem").Value = iOrdem

       ' Dgv.EndEdit()

        Dim dt As DataTable    'obter alterações
        dt = Dgv.DataSource.GetChanges
        dgvTemp.DataSource = dt

    End Sub

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.