Hallo.
Ich arbeite an einem Control, das folgendermaßen aufgebaut ist:
Links ist eine Liste (DataGridView) mit Kostenstellen, rechts textboxen, in denen Informationen zu der links gewählten Kostenstelle angezeigt werden.
Einige der Textboxen sollen Änderungen erlauben, die späte gespeichert werden können sollen.
Enthalten sind die Daten in einer gemeinsamen DataTable, die sich in einem DataSet befindet.
Das DataSet wird beim Laden der Form automatisch gefüllt (funktioniert)
Sowohl das DataGridView als auch die Textboxen sind Datengebunden, d.h. sie zeigen automatisch den aktuellen wert der aktiven Zeile im DataSet an.
Wähle ich jetzt im DataGridView einen Eintrag aus, werden automatisch die Textboxen angepasst, funktioniert alles.
Aber jetzt das erste Problem:
Ändere ich den Text in den Textboxen wird ja automatisch eine Änderung an der DataRow im DataSet durchgeführt (lässt sich dadurch bestätigen, dass die Änderung auch im DataGridView angezeigt wird).
Frage ich jetzt aber den RowState dieser Zeile ab, steht er immer noch auf Unchanged. Obwohl die Zeile eindeutig modifiziert wurde.
Das konnte ich umgehen, indem ich das Validated Event der Textboxen abfange (wird geworfen, sobald der Focus eine Textbox verlassen will) und DataRow.EndEdit() ausführe.
Wurden änderungen vorgenommen, so wird der RowState richtig als Modified erkannt.
Wäre ja auch ok, jetzt habe ich allerdings die Anomalie, dass der RowState manchmal auch mit Modified angegeben wird, selbst wenn ich nichts eingebe und nur aus der Liste links neue Kostenstellen anzeigen lasse (aber eben nur manchmal, wenn eine Kostenstelle wiederholt angeklickt wird :confused: ).
Mein Problem ist im großen und ganzen folgendes:
Ich verstehe nicht, wie und wann der RowState automatisch gesetzt wird.
Wird BeginEdit() automatisch aufgerufen wenn eine Textbox betreten wird, EndEdit() aber nicht automatisch beim verlassen? Wird bei einem RowEnter (auswahl einer neuen Kostenstelle im DataGridView) automatisch ein AccepChanges() ausgeführt? (würde den RowState ja auch zurücksetzen)
Nochmal eine zusammenfassung der Aufgabe meines Controls (vereinfacht):
Daten aus einer Tabelle anzeigen, auswahl einer Zeile im DataGridView, anzeige der Details in Textboxen.
Erkennen von Änderungen über den RowState einer Row im DataSet
Das kann doch nicht so schwer sein :confused:
P.S.: Das ganze muss Datengebunden sein, ich darf die Textboxen nicht manuell füllen, ich darf auch keine Usereingaben abfragen um Änderungen zu erkennen. Alle Operationen müssen auf Datenebene (DataSet) ausgeführt werden.
MfG buddybubble