title image


Smiley Oje !
Hallo nochmal



Also ich entwickele mit VC# 2003, und da klappt das mit EndCurrentEdit prima (?)



Zum Thema CurrencyManager und Co. hab ich auch lange lesen müssen, bis ich das halbwegs verstanden hatte. Ob ich das jetzt gut erklären kann...hmm, versuche es mal:



Zunächst steht da erstmal der BindingContext. Über den BindingContext einer Form hast Du Zugriff auf alle DataBindings der Controls auf diesem Form. Über die entsprechende Syntax (this.BindingContext[ DataSource, DataMemeber]) bekommst Du dann ein CurrencyManager-Objekt zurück, wenn es sich bei der gebindeten DataSource um ein Objekt vom Typ IList handelt Das heisst, dass die DataSource eine Liste von Objekten handelt (wie eben u.a. DataTable resp. DataView).



Über das CurrencyManager-Objekt hast Du dann Zugriff auf Werte wie Position und Current usw.

Die Idee ist folgende:



Sagen wir mal, Du hats 2 Edits auf Deinem Form, eine für Name und eine für Strasse.

Diese beiden Edits bindest Du an eine Tabelle "Kunde" im DataSet xyz, und zwar das Edit für den Namen an das Tabellenfeld "Name", und das Edit für Strasse an das Tabellenfeld "Strasse".



Sagen wir, in der Tabelle "Kunde" befinden sich zur Zeit 30 Rows. Du befüllst jetzt Dein DataSet mittels Fill-Funktion. Die Edit-Felder wissen jetzt zwar durch das DataBinding, in welcher Tabellen-SPALTE sich ihre Daten befinden ("Name" und "Strasse"), aber welche von den 30 Rows soll denn jetzt angezeigt werden ?



Genau da kommt der CurrencyManager ins Spiel. Dieser liefert Dir jederzeit die aktuelle Row (Current), oder auch einfach die Positionsnummer (Position). Wenn Du jetzt z.B eine "Blättern"-Funktion auf Deinem Form haben willst, dann baust Du einfach 2 Buttons ein (Vor und Zurück), holst Dir im jeweiligen Eventhandler das CurrencyManager-Objekt, und erhöhst oder erniedrigst einfach die Position. Das wars.



So, jetzt noch das EndCurrentEdit. Das hab ich jetzt leider echt nicht mehr im Kopf, aber ich versuchs mal zu umreissen:

Das hat mit den DataRowVersion zu tun (such mal in der MSDN). In jedem DataSet können mehrere Versionen von ein und derselben DataRow existieren. Nämlich zum Beispiel das Original (so, wie man es aus der Datenbank geladen hat), dann noch die editierte Version (eben wenn Du zum Beispiel in einer gebindeten EditBox was geändert hast). In letzterem Fall befindet sich die Row dann automatisch im Editiermodus, und wenn der nicht zuvor mittels EndEdit (bzw. EndCurrentEdit) beendet wurde, erkennt das DataSet das nicht als "übernehmbare" Änderungen an. Erst durch das EndCurrentEdit wird dem DataSet gesagt: "Hey, da sind Änderungen gemacht und auch ABGESCHLOSSEN worden".



Was passiert nun, wenn Du Update ohne ein vorausgehendes EndCurrentEdit aufrufst ?

Nun, das DataSet findet keine geänderten Rows, schreibt also auch nix weg. Da die DataSets default-mässig aber so eingestellt sind, dass sie sich nach dem Update wieder mit der Datenbank synchronisieren, passiert folgendes:

Nach dem Update liest sich das DataSet die Daten erneut aus der Datenbank ein, und da stehen ja nunmal immer noch die alten Daten drin. Und Dein Editfeld zeigt die dann natürlcih auch an.







So, ich hoffe, das war einigermassen verständlich. Ich empfehle Dir, in der MSDN mal nach folgenden Keywords zu suchen:

BindingContext, BindingManagerBase, PropertyManager, CurrencyManager, DataRowVersion, DataRowState, AcceptChanges, RejectChanges.





Viel Erfolg !



Gruß

quasi11








geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: