Dataset m:n-View Darstellung in nur 2 DGV‘s

  • VB.NET
  • .NET 4.5

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Hofi1609.

    Dataset m:n-View Darstellung in nur 2 DGV‘s

    Hallo,
    ich beziehe mich hier bei meiner Frage auf das Video Film VI – m:n-View vom ErfinderDesRades, welches sehr anschaulich eine solche Beziehung mit Hilfe von 4 DGV’s darstellt.

    Mein Datenbasis entspricht im Wesentlichen dem oben genannten Beispiel, weshalb ich hier auch die gleichen Begriffe verwenden möchte.

    Da aber in meinem Fall die „Artikel-Tabelle“ nur der Verknüpfung von „Kategorie“ und „Lieferant“ dient und keine weiteren Informationen enthält, möchte ich das Ganze nur mit 2 DGV’s Visualisieren.
    Im linken DGV stehen die Daten, welche die „Kategorie“ enthalten und im rechten DGV sollen die „Lieferanten“ dazu aufgelistet werden.
    Wie kann ich das bewerkstelligen?

    Wobei in meinem Fall die die „Kategorie-Tabelle“ noch mehrere von einander abhängige übergeordnete Tabellen hat.
    Bis zur testweisen Darstellung der „Artikel“, welche ich ja eigentlich nicht benötige, funktioniert das Modell.

    Nun komme ich aber nicht weiter….

    Ich hoffe ich habe mein Problem verständlich dargestellt und danke euch schon im Voraus für eure Hilfe :) :) :)

    Hofi1609
    Willkommen im Forum.
    Das geht nicht ohne Code. Letztenendes müsstest Du über den Kategorie-BindingSource-CurrentChanged-EventHandler (am besten per LINQ) festlegen, welche Lieferanten angezeigt werden. Und vice versa.
    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.
    hmm - prinzipiell kann man einen m:n-View in 2 DGVs darstellen - rein im Designer designed - ohne UserCode.
    In meim Film sinds nur deswegen 4 DGVs, weil ich einmal die Personen in Abhängigkeit ihres Berufes anzeigen, und ein andermal die Berufe in Abhängigkeit der Personen.

    Also wenn dein Datenmodell wirklich so ist, wie du sagst, kannst du die Lieferanten in Abhängigkeit der Kategorien anzeigen - in 2 DGVs - kein Problem, und ich empfehle, das auch ohne UserCode zu tun.
    Wenn du dabei alle Lieferanten-Eigenschaften sehen willst, musste halt so viele ComboboxDatagridviewColumns einbasteln, wie Lieferant Spalten hat (ausser Schlüsselspalten PK, FK - die will keiner sehen).
    Sorry, dass ich mich jetzt erst melde, bin aber nicht eher dazugekommen den Tipp vom "ErfinderDesRades" zu testen.
    Das Ergebnis, ein DGV voller ComboboxDatagridviewColumns sieht zwar nicht so schön aus, aber es funktioniert ;) , danke für die Hilfe.

    Nun habe ich aber eine neue Herrausforderung, vielleicht könnt Ihr mir da auch helfen:
    Ich habe links eine Tabelle "Daten" welche unter anderem die zwei Spalten "Genre" und "Category" enthält, in denen jeweils eine Ziffer steht.
    Recht habe ich die Tabelle "Content" welche aus folgenden Spalten besteht: ID; Category; Genre; Description.
    Es gibt zu jeder Kategorie 16 (0-15) Genre deren Name in Description steht, Bei Genre = 0 enthält Description den Namen der Category.

    Wie kann ich nun mit 2 Comboboxen oder mit DGB und ComboboxDatagridviewColumns, links die Category und rechts das Genre aus der Tabelle Daten anzeigen?
    Wichtig ist, dass im CategoryDropDown nur die Zeilen aus Content angezeigt werden bei denen Genre = 0 ist und in GenreDropDown nur die wo Category = Auswahl CategoryDropDown ist.

    Gibt es eine Lösung ohne programmieren?

    VG Hofi1609

    Hofi1609 schrieb:

    ein DGV voller ComboboxDatagridviewColumns sieht zwar nicht so schön aus
    Wieso nicht?
    Wenn man ComboboxStyle.Nothing (oder so ähnlich) festlegt ist eine ComboboxColumn von einer TextboxColumn optisch nicht zu unterscheiden.

    Deine Beschreibung kann ich nicht sicher verstehen, und meine Beschreibung einer Lösung wäre vmtl. noch unverständlicher.
    Kannst du vlt. eine Solution anhängen, die das Problem reproduziert?
    Aber auch ein Bildle des Datenmodells im DatasetDesigner wäre hilfreich.
    Zum Anhängen solcher Dinge:
    Das hatte ich mir fast gedacht.... ;)

    Was meinst du mit einer Solution?

    Aber ein paar Bilder kann ich liefern, eventuell verdeutlichen sie das Problem:


    Hier mein komplettes Datenmodell.
    Das DS ist über mysql an eine MariaDB10 angebunden und wird nur für die Visualisierung der Daten benutzt.
    Erstellt werden die Daten durch diverse Importe und Scans aus anderen Quellen direkt per SQL.

    Die Problemstelle:

    Die beide gezeigten reinen Beziehungen scheinen aber so nicht zu funktionieren???

    Hier noch ein Auszug aus der Tabelle "smConten" der den Aufbau verdeutlichen soll:

    Ich weiß, dass das Design hier nicht gerade clever ist, aber der Aufbau dieser Tabelle wird von einem importiertem Standard so vorgegeben, welchen ich einfach übernommen habe. ;)

    So, ich hoffe das hilft für das Verständnis meines Problems.

    Gruß Hofi1609

    Neu

    Hofi1609 schrieb:

    Wie kann ich nun mit 2 ComboboxDatagridviewColumns, links die Category und rechts das Genre aus der Tabelle Daten anzeigen?
    Dein Dataset zeigt 2 Relationen zwischen den Tables - die müssen ja unterschiedliche ForeignKeys definieren.
    Problemlösung: Die eine DGVComboColumn "folgt" der einen Relation, die anmdere der anderen.
    Wenn du schomal eine DGVComboColumn erfolgreich eingerichtet hast, sollte die zweite einzurichten proinzipiell kein Problem sein.
    Dran denken: Jede ComboColumn verlangt ihre eigene BindingSource (auf in diesem Falle dieselbe ParentTable). Sonst beeinflussen sich die Auswahlen gegenseitig.

    Das "Folgen" einer bestimmten Relation geschieht über das Festlegen von DGVComboColumn.ValueMember (welche den ForeignKey bezeichnet). (s. 4-View-Tuts, kennste, oder?)



    Ähm - insgesamt ist das aber ein glaub vermurkstes Datenmodell, wenn Category und Genre in derselben Tabelle "bereitgestellt" werden.
    (Was ist ühaupt der Unterschied zw. Kategorie und Genre??)

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

    Neu

    ErfinderDesRades schrieb:

    Ähm - insgesamt ist das aber ein glaub vermurkstes Datenmodell, wenn Category und Genre in derselben Tabelle "bereitgestellt" werden.

    Da bin ich vollkommen deiner Meinung, aber wie schon beschrieben habe ich das einfach übernommen aus "ETSI EN 300 468" (Seite 53). Glücklich bin ich damit auch nicht und ich bin am überlegen ob ich das noch etwas besser gestallten sollte. Die Vorgabe lässt auch nur genau einem Wert (Kategorie/Genre) pro Film zu, was aber in der Realität viel zu "grob" ist.

    ErfinderDesRades schrieb:

    (Was ist ühaupt der Unterschied zw. Kategorie und Genre??)

    Hier streiten sich die "Götter" es gibt keinen Standard und jeder macht das anders, siehe de.wikipedia.org/wiki/Kategorie:Filmgenre und de.wikipedia.org/wiki/Filmgenre. Auch die Begriffe Genre und Kategorie werden je nach benutzter Quelle unterschiedlich definiert.
    Man kann es aber grob als Filmkategorie und diverse Subkategorien ansehen...

    Zu deiner Lösung: (vielen Dank)
    Dem kann ich aber nicht so ganz folgen. Im Kategorie-DGV dürfen ja nur die Datensätze enthalten sein, welche bei Genre = 0 sind, wobei der Datensatz aus smEitData über ed_Category ausgewählt sein soll.
    Im Genre-DGV wiederum, sollen nur die Datensätze enthalten sein welche die oben ausgewählte Kategorie enthalten, wobei hier der Inhalt von ed_Genre ausgewählt sein soll.

    Jede ComboColumn verlangt ihre eigene BindingSource (auf in diesem Falle dieselbe ParentTable). Sonst beeinflussen sich die Auswahlen gegenseitig.

    Wenn ich die Kategorie wechsle muss sich natürlich auch der Inhalt von Genre ändern, Genre ist also von Kategorie abhängig.

    Gruß Hofi1609

    Neu

    Hofi1609 schrieb:

    Wenn ich die Kategorie wechsle muss sich natürlich auch der Inhalt von Genre ändern, Genre ist also von Kategorie abhängig.
    Dann nimmst du eben für beide ComboColumns dieselbe BindingSource (und lässt sie dennoch je ihrer Relation folgen).
    (kann allerdings sein, dass dann die jeweils annere ComboZelle nicht sofort refresht (Bug))

    Neu

    OK, vielen Dank vorerst.
    Im Moment komme ich leider nicht dazu an meinem Projekt weiter zu machen.
    Ich werde aber in den nächsten Tagen deine Vorschläge mal ausprobieren und mich dann wieder hier melden.

    Wenn ich noch zwei oder dreimal darüber schlafe, entschließe ich mich eventuell den ganzen Vorgang einfach zu ändern, dann hätte sich das Problem ohnehin gelöst.

    Viele Grüße Hofi1609