DataSet - alle Items aus eingeschachtelter DataTable anzeigen

  • VB.NET
  • .NET 4.5

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von DerSmurf.

    DataSet - alle Items aus eingeschachtelter DataTable anzeigen

    Hallo ihr lieben,
    ich habe mal wieder eine eher grundsätzliche Frage.
    In meinem DataSet gibt es eine Table Supplier und eine Table Article.
    Diese beiden stehen in einer Beziehung, dass es für jeden Article einen Supplier gibt - in der Table Article ist also der Fremdschlüssel, der auf die Supplier verweist enthalten.
    Wenn ich nun alle Article in einem DGV anzeigen (und bearbeiten) möchte, ziehe ich das Article DGV aus den Datenquellen auf die Form.
    Möchte ich nur Article eines bestimmten Supplier angezeigt bekommen, ziehe ich aus den Datenquellen die in Suppler eingeschachtelten Article auf die Form.

    Wie ist das vorgehen, wenn ich beides möchte?
    Also einen Supplier auswählen und nur dessen Article angezeigt bekommen, aber auch auf einen Button zum Beispiel klicken, um alle Article angezeigt zu bekommen?

    Brauche ich dann tatsächlich beide DGVs - deren Anzeige ich zum Beispiel über ein SplitContainer mit versteckten Panels regel - oder geht das auch mit einem DGV (und einer BindingSource)?
    Geht schon. Du schaltest einfach bei der DGV-Property DataSource zwischen den BindingSources hin und her. Standardmäßig werden ja 2 Artikel-BSs erzeugt. Eine, die als Datenquelle das tDS hat, eine, die als Datenquelle die Supplier-BS hat. Und das kannst Du nutzen, indem Du eine dieser beiden als DGV-DataSource festlegst.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Neu

    Lieber @VaporiZed
    Ich danke dir für deine Blitzantwort :o)

    Das ganze habe ich jetzt in einer Demo Anwendung umgesetzt.
    Könntest du hier mal bitte rüberschauen, ob meine Logik so Sinn macht?

    Edit: Ich habe vergessen die ArticleBindingSources umzubenennen. Das wäre hier wohl sehr sinnvoll...
    ArticleBindingSource ist also die "normale" BS. ArticleBindingSource1 ist die eingeschachtelte. (auch wenn du dir das bestimmt selber denken kannst :)
    Dateien
    • BSTest.zip

      (115,55 kB, 3 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DerSmurf“ ()

    Neu

    Ich hab das mal bisserl gehübscht:
    • Den Deppen-Namespace entfernt, und paar andere unnötige auch
    • FileInfo weiss selbst, ob es existiert
    • eine Checkbox eingeführt statt eines Buttons - damit man "Alle Anzeigen" auch zurücknehmen kann
    • Zuweisungen an Combobox.Text sind nicht sinnvoll - da wird nur verborgen, was angewählt ist - angewählt isses aber trotzdem. Stattdessen verstecke ich die Combo, wenn nicht gebraucht.
    • Jo - Benamung: mit "ArticleBindingSource" und "ArticleBindingSource1" zu hantieren ist eiglich sofort tödlich.
    • DatenDatei mit ins Projekt aufgenommen
    Jo - bleibt nicht viel Code übrig:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _DataFile As New FileInfo("Data.Xml")
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. If _DataFile.Exists Then DataSet1.ReadXml(_DataFile.FullName)
    5. AddHandler ckAlleAnzeigen.CheckedChanged, AddressOf ckAlleAnzeigen_CheckedChanged
    6. ckAlleAnzeigen_CheckedChanged(Nothing, Nothing)
    7. End Sub
    8. Private Sub ckAlleAnzeigen_CheckedChanged(sender As Object, e As EventArgs)
    9. Dim checked = ckAlleAnzeigen.Checked
    10. ArticleDataGridView2.DataSource = If(checked, bsArticle, bsSupplierArticle)
    11. ComboBox1.Visible = Not checked
    12. End Sub
    13. End Class
    Dateien
    • BSTest01.zip

      (20,05 kB, 4 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „ErfinderDesRades“ ()