BindingSource.RemoveCurrent() rückgängig machen?
-
Hallo,
am besten ich poste als erstes mal den Code:
// Aktuellen Datensatz löschen private void mnuDatensatzLoeschen_Click(object sender, EventArgs e) { // Datensatz löschen _bsKonten.RemoveCurrent(); Konten.Update(_dsKonten); // Formular aktualisieren UpdateControls(); grvKonten.Focus(); }
_bsKonten ist meine BindingSource und mit dem entsprechenden DataSet _dsKonten verbunden.
In Konten.Update() wird der SQL-Befehl ausgeführt. Diese Funktion gibt bei Erfolg true, ansonsten false zurück.
Nun kann es vorkommen das zu dem Konto noch Buchungen existieren, wodurch der Update-Befehl fehlschlägt. Das ist auch so gewollt, allerdings ist durch den Aufruf von _bsKonten.RemoveCurrent() der Datensatz im Hauptspeicher ja bereits gelöscht, was dann natürlich nicht mehr mit der Datenbank übereinstimmt.
Hat jemand eine Idee wie ich das am besten lösen kann?
LG, Sascha
-
Die Antwort hast du dir selber in der Frage gegeben. Wie wäre es mit einem
if
?if(Konten.Update(_dsKonten)) _bsKonten.RemoveCurrent();
-
Rhombicosidodecahedron schrieb:
Die Antwort hast du dir selber in der Frage gegeben. Wie wäre es mit einem
if
?if(Konten.Update(_dsKonten)) _bsKonten.RemoveCurrent();
In dem Fall würde nie ein Update stattfinden, da der Datensatz ja noch im DataSet vorhanden ist. Der Aufruf von RemoveCurrent() muss also schon vorher stattfinden...
Ich dachte eher daran den Datensatz irgendwie (als Kopie) zwischen zu speichern und nach einem fehlgeschlagenen Update wiederherzustellen, allerdings weiß ich im moment nicht wie ich das am besten anstellen soll?
-
Habs jetzt schon selbst gelöst, war im Prinzip ganz einfach:
// Datensatz löschen _bsKonten.RemoveCurrent(); bResult = Konten.Update(_dsKonten); // Fehlerkontrolle if (bResult == false) _[b]dsKonten.RejectChanges();[/b]
Trotzdem danke