Pica1958 Posted June 4, 2022 at 08:55 PM Report Share #626116 Posted June 4, 2022 at 08:55 PM 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 More sharing options...
iznougudpt Posted June 6, 2022 at 08:51 AM Report Share #626123 Posted June 6, 2022 at 08:51 AM Tens de fazer datagridview.EndEdit() para forçar a linha da datagrid a assumir os valores. Link to comment Share on other sites More sharing options...
Pica1958 Posted June 6, 2022 at 02:23 PM Author Report Share #626128 Posted June 6, 2022 at 02:23 PM 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 More sharing options...
iznougudpt Posted June 7, 2022 at 12:13 PM Report Share #626149 Posted June 7, 2022 at 12:13 PM Não costumo usar as datagrids com datasets para fazer as alterações na BD. Crio comandos SQL com as alterações que pretendo, assim sei que só altero o que pretendo e evito erros. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now