Hi,
ich habe ein Problem, wenn ich rejectchanges() verwende.
Erstmal kurz was zum Aufbau:
Ich habe ein Form1 mit einem DataGridView, welches an ein Dataset gebunden ist, in dem verschiedene Daten aus einer DB stehen. In jeder Zeile ist auch ein Symbol erstellt, was als Button dient, um die Zeile zu editieren (also nicht das, was beim dgv dabei ist, wenn userCanEdit oder so ähnlich auf true ist!).
Ich rufe nun ein weiters Form (Form2) mit meinem DataSet und einem Key als Parameter auf.
Dort erstelle mir jetzt eine DataRow anhand des Keys. (Ich weiß, ich könnte dies auch vorher machen und nur die DataRow an Form2 übergeben, aber ich brauche das DataSet noch für andere Sachen, die später mal kommen, daher dieser umweg)
Dieses Form2 hat mehrere Textboxen, eine Richtextbox und noch mehrere Comboboxen. Diese habe ich mit der DataRow gebunden. Die Daten werden dann auch richtig angezeigt.
Wenn ich jetzt etwas ändere und auf übernehmen klicke, dann wird alles aus der DataRow in der DB aktuallisiert und bei Form1 auch korrekt angezeigt.
Nun aber das Problem:
Klicke ich auf den Button "zurücksetzen", wird folgendes aufgerufen:
C#-Quelltext
1: 2: 3: 4:
| private void button1_Click(object sender, EventArgs e) { dr.RejectChanges(); } |
also erstmal nichts besonderes.
Im Hintergrund sehe ich noch das Form1 und kann da auch sehen, dass im dgv die Daten auch wirklich zurückgesetzt werden auf den Zustand, wo auf editieren geklickt wurde -> rejectchanges() tut also an sich erstmal das, was es soll.
Alle Felder in Form2 bleiben aber unverändert. Erst wenn ich in irgendein anderes Feld klicke (also raus aus dem wo ich zuletzt war) und da dann eine änderung vornehme, werden alle Felder in Form2 zurückgesetzt.
Ich verstehe nicht, wie es zu dieser Inkonsistenz kommen kann. Ich habe auch schon ein this.refresh() probiert, um mal das ganze Form2 inklusive der Usercontrols zu aktuallisieren, aber das bringt auch nichts.
Hier noch ein wenig Code, falls da doch der Fehler sein sollte:
der Konstruktor von Form2, den ich hier verwende, damit man sieht, wie ich die Felder binde
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| public Form_NewPosData(long posID, bauDataSet bds) { InitializeComponent(); this.bds = bds; this.posid = posID;
dr = this.bds.positionen.Rows.Find(posID);
comboBox_Einheit.DataBindings.Add(new Binding("Text", this.dr, "einheit", false, DataSourceUpdateMode.OnPropertyChanged)); textBox_Pos.DataBindings.Add(new Binding("Text", this.dr, "pos_nr", false, DataSourceUpdateMode.OnPropertyChanged)); richTextBox1.DataBindings.Add(new Binding("Text", this.dr, "pos_text", false, DataSourceUpdateMode.OnValidation)); textBox_Menge.DataBindings.Add(new Binding("Text", this.dr, "menge", true, DataSourceUpdateMode.OnPropertyChanged, 1, "N2")); textBox_EP.DataBindings.Add(new Binding("Text", this.dr, "ep", true, DataSourceUpdateMode.OnPropertyChanged, 0, "N2")); comboBoxZusatz.DataBindings.Add(new Binding("Text", this.dr, "zusatz", false, DataSourceUpdateMode.OnPropertyChanged)); } |
Ich hoffe, jemand hat eine Idee, woran das liegen könnte oder was ich noch probieren kann.