Verificare se i dati sono stati modificati

mercoledì 04 marzo 2009 - 21.34

pico81 Profilo | Newbie

Sto realizzando un applicazione di tipo gestionale in vb 2008 con db access.
Vorrei inserire una funzione che alla chiusura del form verifichi se i dati sono stati modificati in modo tale da far aprire un messagebox per confermare il salvataggio delle modifiche apportate.
Ho provato con il metodo dataset.HasChanges, ma forse non riesco ad utilizzarlo nel modo giusto.

Premetto che vorrei fare questo per evitare di creare 2 form, uno per la sola visualizzazione e uno per la modifica

Jeremy Profilo | Guru

Ciao Antonio.
Come lo usi?

Facci sapere....
Ciao

pico81 Profilo | Newbie

Faccio così:

Private Sub Form1_FormClosing....
If Me.DataSet1.HasChanges(DataRowState.Modified) Then
MsgBox("I dati sono cambiati")
End If
End Sub

Se visualizzo i dati con un datagrid funziona, mentre se li visualizzo nelle textbox non funge.
Dove sbaglio?

Jeremy Profilo | Guru

Ciao Antonio.
>Se visualizzo i dati con un datagrid funziona, mentre se li visualizzo nelle textbox non funge.
>Dove sbaglio?
Non è un problema di come li visualizzi ... ma di come li aggiorni.
Se per "visualizzo nelle textbox" intendi il databinding, allora devi preoccuparti di usare il metodo WriteValue per riportare le modifiche nel Dataset.
Per esempio...nell'evento textchanged...puoi scrivere questo codice:

TextBox1.DataBindings("Text").WriteValue() DataGridView1.Refresh()

Facci sapere...
Ciao

pico81 Profilo | Newbie

Ho capito l'istruzione
TextBox1.DataBindings("Text").WriteValue()
ma non questa, visto che nel form non ho nessun datagridview
DataGridView1.Refresh()

oppure devo aggiungerlo e mettere la proprietà Visibile=False?

Jeremy Profilo | Guru

>oppure devo aggiungerlo e mettere la proprietà Visibile=False?
No .... scusa.
Il datagridview1.refresh era solo nel caso in cui tu avessi voluto vedere l'effetto del metodo WriteValue realtime
Ma solo a titolo di dimostrazione.
Se tu non hai il datagridview .... il refresh cancellalo.

Facci sapere...
Ciao

pico81 Profilo | Newbie

Non funziona, ma penso che quella che mi hai indicato sia la strada giusta da seguire.
Grazie, a presto gli aggiornamenti.


RISOLTO COSI':

Me.TextBox1.BindingContext(mioDataSet.Tables("miaTabella")).EndCurrentEdit() If Me.mioDataSet.HasChanges(DataRowState.Modified) Then MsgBox("I dati sono cambiati") Else MsgBox("I dati NON sono cambiati") End If

Per evitare ti dover scrivere tutto per ogni texbox o qualsivoglia tipo di controllo ho fatto così:
For Each C As Control In Me.Controls C.BindingContext(mioDataSet.Tables("miaTabella")).EndCurrentEdit() Next If Me.mioDataSet.HasChanges(DataRowState.Modified) Then MsgBox("I dati sono cambiati") Else MsgBox("I dati NON sono cambiati") End If

Se avete altre soluzioni proponetele, io grazie all'input di Jeremy ho dato il mio contributo.

Jeremy Profilo | Guru

Ciao Antonio.
La soluzione che hai trovato è quella giusta ... tanto è vero che ti stavo proponendo la stessa cosa dopo aver fatto delle prove.
Anzi la tua è ancora migliore di quello che ho trovato io.

Ciao

pico81 Profilo | Newbie

La soluzione era ancora più semplice!!!!!!!!!!!!!!
Alla fine ho scoperto che si può fare anche così:

Me.Validate() Me.miaTabellaBindingSource.EndEdit() If Me.mioDataSet.HasChanges(DataRowState.Modified) Then MsgBox("I dati sono cambiati") End If

Provare per credere!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5