Datensatzänderung in BindingSource erkennen

14/08/2008 - 16:35 von Jan Thordsen | Report spam
Hallo Zusammen

ich habe mal eine Frage zu VB 2008.

In einem Datagrid werden diverse Datensàtze einer Tabelle angezeigt. Wird
ein Satz im Grid angeklickt, wird genau dieser ein angeklickte Satz in eine
DataTable geladen und über eine BindingSource an diverse Controls in einem
Splitcontainer-Panel auf demselben Formular gebunden. Damit kann der Satz
dann komfortabel editiert werden.

So weit so gut. Jetzt hab ich aber Problem, bzw, ich bekomme es nicht hin,
im Formular zu erkennen, dass sich Daten in diesen Eingabefeldern geàndert
haben. Konkret gesagt, der user àndert Daten in den Eingabefeldern und klickt
dann im Grid auf einen anderen Satz. Bevor jetzt also meine Datatable neu
geladen wird, muß ich natürlich den Benutzer fragen, ob er die geànderten
Daten speichern will. Aber ich finde kein Event an meiner BindingSource, das
geworfen wird, bevor das Neuladen der Datatable erfolgt. ItemChanged und
CurrentChanged kommen zu spàt.

Kann mir jemand einen Tipp geben, was zu tun ist? Ich hoffe, ich habe mich
verstàndlich ausgedrückt.

Gruß

Jan Thordsen
 

Lesen sie die antworten

#1 Peter Fleischer
14/08/2008 - 17:32 | Warnen spam
"Jan Thordsen" <Jan schrieb im
Newsbeitrag news:

In einem Datagrid werden diverse Datensàtze einer Tabelle angezeigt. Wird
ein Satz im Grid angeklickt, wird genau dieser ein angeklickte Satz in
eine
DataTable geladen und über eine BindingSource an diverse Controls in einem
Splitcontainer-Panel auf demselben Formular gebunden. Damit kann der Satz
dann komfortabel editiert werden.

So weit so gut. Jetzt hab ich aber Problem, bzw, ich bekomme es nicht hin,
im Formular zu erkennen, dass sich Daten in diesen Eingabefeldern geàndert
haben. Konkret gesagt, der user àndert Daten in den Eingabefeldern und
klickt
dann im Grid auf einen anderen Satz. Bevor jetzt also meine Datatable neu
geladen wird, muß ich natürlich den Benutzer fragen, ob er die geànderten
Daten speichern will. Aber ich finde kein Event an meiner BindingSource,
das
geworfen wird, bevor das Neuladen der Datatable erfolgt. ItemChanged und
CurrentChanged kommen zu spàt.

Kann mir jemand einen Tipp geben, was zu tun ist? Ich hoffe, ich habe mich
verstàndlich ausgedrückt.



Hi Jan,
es gibt kein Ereignis, was vor einem Datensatzwechsel ausgelöst wird. Die
Ursache dafür ist im Prinzip der Arbeit der Binding-Objekte begründet. Damit
nicht zu viel Aufwand (CPU-Leistung) verbraucht wird, bekommt jedes
Binding-Objekt bei Anforderung zu einem Datensatzwechsel die Mitteilung über
die Position des neuen Datensatzes. Es hat dann bei Bedarf
(DataChanged=True) den Puffer in den alten Datensatz zu schreiben, den
Puffer mit dem neuen Inhalt aus dem neuen Datensatz zu füllen und die
Fertigstellung an den BindingManager zu melden. Da diese Aktivitàten
zwischen den Binding-Objekten asynchron verlaufen, wàre ein
BevoreChanged-Ereignis nur realisierbar, wenn die Bindingtechnologie
aufwendiger gestaltet werden würde.

Als Lösungswege für eine Datenprüfung vor Datensatzwechsel bieten sich
unterschiedliche Wege an:

1. ungebundene Steuerelemente
2. seperaten BindingManager, der den neuen Datensatz nur zur Bindung
freigibt, wenn positiv geprüft wurde, egal, was der andere BindingManager
macht.

Ich favorisiere die Variante 2.


Viele Grüsse
Peter

Ähnliche fragen