Laden...

Wie funktioniert DataTable.GetChanges() intern

Letzter Beitrag vor 11 Jahren 3 Posts 915 Views
Wie funktioniert DataTable.GetChanges() intern

Hi ich bin dabei meine eigene ObservableCollection zu bauen die die Funktionalität wie DataTable.GetChanges() anbieten soll nur scheint mir noch das wissen zu fehlen wie ich die Änderungen erstmal richtig speichere um sie dann später auslesen zu können

erste idee war ein Dictionary welches einfach alle Änderungen der Reihenfolge nach speichert um sogar ein Rollback ausführen zu können (lief auch soweit bis auf Modifizierungen rückgängig zu machen (is aber auch erstmal egal)) naja das prob hier is halt das man mit einfachen abfragen z.B

DicOfChanges.Where(x => (x.Value).Modification == CollStat.Added);

auch elemete bekommt die später wieder gelöscht wurden.

zweite Idee war für jede art von Änderung eine eigene Collection zu machen und dann während des Events zu die Änderung der einen Collection hinzu zu fügen und aus den anderen zu löschen hier find ich kann das dauerhafte iterieren zum Problem werden

dritte Idee ich kombiniere 1. und 2. und erstelle ein

Dictionary<???,List/Dictionary<???>>

um bei einen Event die Änderungen Objekt genauer bearbeiten zu können

ich hab mir hier schon versucht die Logik dahinter zu verstehen bin aber leider kläglich gescheitert. Könnte mir bitte einer erklären wie das da ganz grob abläuft.

spontane Ideen sind auch gerne gesehen

momentan hab ich

        #region nested class
        private class _ElementKeeper<T>
        {
            public T Element;
            public CollStat Modification;

            public _ElementKeeper(T element, CollStat Modifi)
            {
                Element = element;
                Modification = Modifi;
            }
        }
        #endregion

beinhaltet das Element und die art der Modifikation

private Dictionary<int, _ElementKeeper<T>> DicOfChanges = new Dictionary<int, _ElementKeeper<T>>();

ist das Dictionary welches ich mit Linq durchsuche

Moin,

sowas gibt es auch fertig: http://dataobjectmodel.codeplex.com/
Der Code ist sehr gut verständlich, so das man schnell sieht, wie das in etwa funktioniert.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

das schau ich mir mal an dank dir

EDIT:
scheint genau das zu sein was ich bauen wollte nur mit mehr schnickschnack dran 😄

sehr schön Projekt nur die vielen Iterationen find ich nicht so gut aber da lässt sich anscheinend aber auch nichts dran ändern da die sein müssen naja man kann nicht alles haben 😛