Salve a tutti sto creando un gestionale.
Quando avvio il programma carico i dati delle tabelle in un dataset che poi visualizzo in un datagridview. Fin qui tutto ok. Il problema sorge quando un utente modifica una riga direttamente dalla griglia. Mi spiego meglio con un po' di codice:
Una volta finito l'editing della riga, l'utente con la pressione di invio dovrebbe scrivere i cambiamenti sul DB:
Codice PHP:
'Questo è il codice che ho nell'evento keydown della griglia
Private Sub MyDataGrid_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Return Then Db.updateFromDataSet() End If
End Sub
'Questo è il metodo UpdateFromDataset
Try
If dataset.HasChanges() Then
' command.Transaction = connOleDb.BeginTransaction(ISOLATION_LEVEL)
command_Builder.DataAdapter = dataAdapter
If command_Builder.ReturnGeneratedIdentifiers = True Then
command.UpdatedRowSource = UpdateRowSource.None
End If
dataAdapter.Update(dataset)
'Accetto cambiamenti anche sul dataset
dataset.AcceptChanges()
'Inserisco il record nella tabella dei record modificati
InserisciRecordModificato(Griglia.SelectedRows.Item(0).Cells(_CampoId).Value, "articoli", "update", _Id_Client)
writeLog("Operazione eseguita con successo (Update From Dataset)")
' command.Transaction.Commit()
End If
Catch ex As Exception
MsgBox("Update From dataset: " & ex.Message, MsgBoxStyle.Exclamation)
'command.Transaction.Commit()
End Try
L'oggetto Db contiene tutte le informazioni per interagire con il DataBase
Quello che succede è che alla prima pressione del tasto "Invio" il dataset è come se non vedesse i cambiamenti. o meglio " If dataset.HasChanges() Then" ritorna false, se lo premo 2 o 3 volte di seguito invece poi aggiorna la riga.
E' come se alla pressione del tasto invio il dataset non avesse ancora visto il cambiamenti.
Dove sbaglio? E' un po' che cerco di risolvere questo problema non ci sono proprio riuscito.
Grazie a tutti in anticipo, se servono altre info chiedete.
Ciao