Dataset UnDo Funktion / Nutzereingaben rückgängig machen

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Dataset UnDo Funktion / Nutzereingaben rückgängig machen

    Guten Abend,

    ich habe mein Programm welches als Basis ein Dataset hat, weiter ausgebaut und bin ganz zufrieden wie es läuft.

    Jetzt wünsche ich mir eine "Rückgängig-Funktion" für die Eingaben im Dataset. Eine Befragung von Google und Forum hat mir schnell klar gemacht, dass das immens komplex sein kann und ein riesen Thema ist.

    Ich benötige im Prinzip nur eine Rückverfolgung der Eingaben, auf das Wiederherstellen von gelöschten Rows (inkl. ggf. Child-Rows) könnte ich noch verzichten, denn das macht das ganze vermutlich ungleich schwerer.

    Gibt es eine art Best-Practice wie man da vorgeht? Ein Rückgängigmachen auf den letzten Stand ala DataSet.RejectChanges() halte ich nicht für zielführend, denn dort werden ja alle Eingaben rückgängig gemacht und nicht bloß die letzte. Das mehrstufige Rückgängigmachen wäre damit ja auch nicht möglich.

    Erste Idee von mir ging jetzt in die Richtung, dass man nach jeder Nutzer-Eingabe eine Kopie des Datasets gemerkt wird und man dann per Rückgängig-Knopf durch die verschiedenen Dataset-Kopien klicken kann. Ist aber vermutlich grausam wenn man so mit seinen Ressourcen umgeht, da können ja mit einem größeren Dataset auch größere Datenmengen zusammen kommen...

    Prinzipiell müssten ja nur die seit dem letzten Laden geänderten Zeilen gemerkt werden. Vielleicht könnt ihr mir ein paar Denkanstöße in die richtige Richtung geben.

    Viele Grüße

    Philipp schrieb:

    (Titel): Dataset UnDo Funktion

    Jetzt wünsche ich mir eine "Rückgängig-Funktion" für die Eingaben im Dataset. Eine Befragung von Google und Forum hat mir schnell klar gemacht, dass das immens komplex sein kann und ein riesen Thema ist.

    Ich benötige im Prinzip nur eine Rückverfolgung der Eingaben, auf das Wiederherstellen von gelöschten Rows (inkl. ggf. Child-Rows) könnte ich noch verzichten, denn das macht das ganze vermutlich ungleich schwerer.
    Jo, da wünschst du dir drei verschiedene Dinge.
    Welches nun wünschst du?

    Ansonsten: Do/UnDo/ReDo ist ein Pattern, der zB in Word oder auch in jedem guten Editor Anwendung findet. Und wohl auch in vielen anderen Progs (Paint.Net, weitere,...).
    Umgesetzt wird das entweder mit einer Spezialform des "Command-Pattern" - kannste auf Wikipedia nachlesen.
    Oder mittm Memento-Pattern (gugge Wiki)

    Bei der Command-Pattern-Variante gibts zu jeder User-Aktion das Reverse-Command, und man speichert eine Liste von Do/Undo-Command-Pärchen.
    In dieser History-List kann man sich logischerweise vor- und zurück-bewegen, und tatsächlich die User-Aktionen durch ihre Komplementär-Commands wieder aufheben.

    Beim Memento speichert man bei jeder User-aktion einen Snapshot des Dokuments.
    Hier werden beim Zurückgehen keine Komplementär-Comnands ausgeführt, sondern es wird ein Snapshot wiederhergestellt.
    Einfacher zu implementieren, aber Speicher-Intensiv.

    Aber du willst ja vielleicht keinen vollausgebildeten Command-Pattern.
    Wie gesagt: Keine Ahnung, was du willst. Was verstehst du unter "Rückverfolgung"?