Typisiertes DataSet - Ereignisse Abrufen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Typisiertes DataSet - Ereignisse Abrufen

    Hallo.
    Ich habe anhand der schönen Turorials (vier views) meine eigenen streng typisierten DataTables mit dem Designer angelegt. Daten hinzufügen, bearbeiten und Anzeigen in entsprechenden Forms, Usercontrols, Textboxen, Datagridviews etc. klappt alles wunderbar.
    Ich frage mich jetzt nur seit einem kompletten vergoogelten Abend, wie ich innerhalb eines Usercontrols oder einer Form auf die Eriegnisse der z.b. RoChanged Events zugreife, die ich mit dem Designer erstellt habe in der Datatable klasse.

    Es nützt mir wenig wenn ich in der Basisklasse das Ereignis abfangen kann in etwa so:

    Quellcode

    1. Partial Class MeinDataSet
    2. Partial Class MeineDataTable
    3. Private Sub MeineDataTable_MeineDataTableRowChanging(sender As Object, e As MeineDataTableRowChangeEvent) Handles Me.MeineDataTableRowChanging
    4. MessageBox.Show("ROW CHANGE !!!")
    5. End Sub
    6. End Class


    Ich möchte mit der "handles" Klausel in dem jeweiligen Form oder UC, in dem ich mein DataSet und die BindingSource instanziere (Designer, beim raufziehen der Table ins DGV oder Detailview), auf das jeweilige Event zugreifen.
    Das DataSet ist ja mit "friends with events" instanziert in der Form, aber ich kriegs nicht vorgeschlagen....
    Also erstmal Danke für die Antwort und den Link.
    Ich renne hier aber in ein grundsätzliches Problem beim Laden, Speichern von Datensätzen im typisierten Datensatz.
    Die Tutorials von MSDN und deine (EdR) sind ja alle ganz toll, aber sie zeigen immer nur wie man Daten direkt im DGV ändert und dann einer XML speichert, oder in einer gebundenen Textbox beim Verlassen des Feldes.

    Ohne fertigen Code zu wollen, möcjhte ich jetzt nochmal grundsätzlich fragen, an welches Objekt ich mich halten muss, wenn ich Änderungen (Löschen, Hinzufügen, Ändern) von Datensätzen (rows) nur via Button zulassen möchte.
    Vorhanden
    Eine Form (oder usercontrol) mit DGV und gebundenen TextBoxen
    Instanz eines typisierten Datensets
    Instanz einer BindingSource
    SaveButton, CancelButton, EditButton

    Beim navigieren durch die typisierte tabelle im DGV ändern sich logischerweise die Daten in den TExtboxen, die eine Row der tabelle jweils unten im DetailView anzeigt.
    Änderungen im DGV nicht erlaubt (readonly)
    Änderungen in den Textboxen möchte ich mit Speichern button ins DataSet übernehmen (bindingsource.endedit) reicht ja schon aus, das geht auch.
    Aber...welche Verbindungen muss ich trennen, damit nicht bei sämtlichen Ereignissen ebenfalls ein RowChange ausgeführt wird?
    Verlasse ich die textbox und navigiere wieder durchs DGV (bei geänderten Textboxen) speichert er die Änderungen direkt ins Dataset (ich weiss das ohne writeXML die nur virtuell gespiehcert sind)

    Das möchte ich unterbinden. Auch beim Verlassen der Textboxen führt er bereits rowchanged Ereignisse aus.
    Ich möchte diese Abfolge von Eriegnissen (textbox lost focus, validted, bindingsource endedit, rowchanged ETC:) NUR ausführen lassen, wenn der USER explizit speichern klickt (zusätzlich soll dann am ende noch der tableadapter die sachen in die Datenbank schreiben, das ist hier aber nicht relevant)

    Hänge ich mich jetzt ins dataset oder in die bindingsource? Und wie mache ich dies?
    Der link hier
    Daten laden, speichern, verarbeiten - einfachste Variante
    bringt lediglich die Möglichkeit durch buttons zu speichern und abzubrechen. Aber er sorgt nicht dafür, dass RowChange oder RowState Ereignisse NUR durch die buttons ausgeführt werden

    derfynn schrieb:

    Ohne fertigen Code zu wollen, möcjhte ich jetzt nochmal grundsätzlich fragen, an welches Objekt ich mich halten muss, wenn ich Änderungen (Löschen, Hinzufügen, Ändern) von Datensätzen (rows) nur via Button zulassen möchte.
    Zum Hinzufügen halte dich an die typisierte DataTable, die stellt typisierte Methoden zum Hinzufügen bereit, etwa eine PersonDataTable stellt eine .AddPersonRow()-Methode bereit, in mindestens zweifacher Überladung.
    Solch kommt auch in den 4-View-Tuts in den CodeSamples vor, aber ich fokussiere es nicht besonders, weils vergleichsweise trivial ist
    (Was soll man zu einer PersonDataTable.AddPersonRow()-Methode erklären - sie tut, wie sie heisst (Nomen est Omen!)).
    Zum Löschen einer typDataRow halte dich an die typDataRow.Delete() - dassis sogar noch trivialer.
    Und zum Ändern einer typDatarow ändere halt deren typisierte Properties - trivialer gehts nimmer:

    VB.NET-Quellcode

    1. myPersonRow.Name = "mein Neuer Name"


    Wichtig ist halt, dass du dir das generierte Zeug im ObjectBrowser gründlich anguckst, und dass du untypisierte Methoden vermeidest, denn sobald du eine davon benutzst, fällst du aus dem typisierten System heraus. Hierzu gugge den "Inspection"-Film, aber nicht nur Filmle gugge, sondern benutz den ObjectBrowser selber.
    weiters gehe ich auch hier darauf ein, wie man ein typDataset programmiert: codeproject.com/Articles/10351…ped-Dataset-for-Beginners
    Weil wie du richtig sagst: Databinding ist das eine, aber das schließt das andere, nämlich konventionelle, typisierte Programmierung ja nicht aus.
    Sondern auch für konventionelle, typisierte Programmierung ist extra gesorgt, durch eine Vielzahl typisierter generierter Methoden, Properties, Events.