Ještě doplním kód, omlouvám se, zkoušel jsem vše možné a tak nějak nemohl vybrat, co pro ilustraci zde uvést. Proto jsem to raději popsal slovně. Když to tedy zjednoduším... Tohle funguje, ale až v okamžiku, kdy uživatel opustí editovaný řádek:
Private Sub dataGridView1_CellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
If DataGridView1.IsCurrentCellDirty Then zmena = True
'Ošetření vstupů
'
'
End Sub
Private Sub DataGridView1_RowValidated(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.RowValidated
If zmena Then sqlAdapter.Update(tabule) : zmena = False ': MessageBox.Show("SQLUpdated")
End Sub
A tohle nefunguje - do databáze se změna uloží až při následující editaci, protože při té první ještě není změna promítnuta ani v DataTable. A já bych právě potřeboval tu změnu promítnout již zde (nebo existuje-li ještě nějaký, tak při posledním eventu po editaci buňky). Navíc, do SQL synchronizovat jen, došlo-li skutečně ke změně.
Private Sub dataGridView1_CellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
If DataGridView1.IsCurrentCellDirty Then zmena = True
'Ošetření vstupů
'
'
End Sub
Private Sub DataGridView1_CellValidated(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValidated
If zmena Then sqlAdapter.Update(tabule) : zmena = False ': MessageBox.Show("SQLUpdated")
End Sub
Nedal by se využít např. event CellValuePushed ? Jak to udělat čistě (aby se to např. neukládalo dvakrát, uložím-li to do DataTable ručně v tomto eventu. A také, uložím-li to ručně, označí se spolehlivě záznam v DataTable pro následující SQL Update ?) a co vše obnáší virtuální režim DataGridView ? Co vše je třeba ošetřovat ručně při aktivovaném virtuálním režimu ? A nebo se v zásadě nic nemění, nebudu-li virtuální režim na nic jiného potřebovat ? Díky Moc, Dalibor
|