Abbildung & Erfassung einer Matrix mit DGVs, DB-Organisation,

  • VB.NET

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

    Abbildung & Erfassung einer Matrix mit DGVs, DB-Organisation,

    Hallo liebes Forum,

    ich brüte nun seit Tagen darüber, wie man folgendes Problem geschickt lösen kann, aber es schlüpft nichts, egal wie sehr ich brüte:

    Wir haben mehrere Transportanbieter, die uns ihre Tarife für verschiedene Frachtarte in Form einer Preismatrix zur Verfügung stellen. Eine Preismatrix enthält Angaben zu Transportkosten nach Gewicht und Zone, jede Zone besteht aus verschiedenen Ländern und ist von Anbieter zu Anbieter verschieden.

    Preismatrix XY
    Anbieter: xxx, Frachtart: Luft


    Gewicht Zone1 Zone2
    1 KG -----1€--- 4€
    2 KG -----2€--- 5€
    3 KG -----3€--- 6€

    Am einfachsten, dachte ich, wäre es, das Ganze so abzubilden:



    Eine Haupttabelle enthält die Namen der Preismatrizen (PK) und Zusatzinfos (Frachtart z.B.). Der Name der Preismatrix dient als Verknüpfung zu den drei Untertabellen (FK):

    Gewicht: Hier wird für jede Preismatrix festgehalten, welche Gewichtsklassen existieren.
    Zonenpreis: Hier wird für jede Zone einer Preismatrix der Preis festgehalten
    Zone: Hier werden alle Länder, die zu einer Zone einer Preismatrix gehören, festgehalten.

    Ich scheitere nun daran, mittels einer Form 1) Preismatrizen anlegen zu können und 2) abfragen zu können, welcher Anbieter für eine Verbindung den besten Preis hat.

    Also: ich habe 1) halbwegs geschafft, ABER auf die unpraktischste nur denkbare Weise: indem ich unterstellt habe, dass es maximal 10 Zonen pro Preismatrix gibt. Ich habe dann in der Datenbank für jede Zone und jede Preisübersicht eine einzelne Tabelle angelegt, so dass ich insgesamt auf 22 Tabellen gekommen bin (..).

    DAS kann nicht der optimale Weg sein und ich wüsste auch nicht wie ich Punkt 2), die Abfrage, umsetzen sollte.


    MEIN PROBLEM - um endlich auf den Punkt zu kommen: wenn ich die Datenbank wie oben abgebildet aufbaue und dann (mittels Designer) den DGVs ihre BindingSource zuweise (also: jede Zonen-DGV bekommt eine Verknüpfung auf die Tabelle "Zone", jede Preis-DGV eine Verknüpfung auf die Tabelle "Zonenpreis", Gewicht-DGV und Matrixauswahl-DGV kommen nur einmal vor) dann sind die einzelnen DGVs abhängig voneinander und nicht gefiltert, das heißt die DGV für Zone1 zeigt die Länder ALLER Zonen an, die in der jeweiligen Preismatrix existeren und wähle ich zum Beispiel in DGV-Zone1 den 3. Datensatz aus, so wird dieser auch in allen anderen DGV-Zone2 - 10 ausgewählt.

    Mit einem DataView-Filter habe ich versucht, die einzelnen DGVs so zu Filtern, dass nur das drinnen steht, was da hineingehört. Für jede DGV habe ich einen DataView-Filter angelegt und das hat auch soweit geklappt.

    Aber nun besteht eben keine Verbindung mehr von der Preismatrixauswahl zu den einzelnen DGVs.... Wechsle ich die Preismatrix, dann folgen die Zonen nicht mehr. Uff, ich hoffe jemand kann mich halbwegs verstehen. Es tut mir leid wenn ich es so umständlich erzähle.

    Hat jemand eine Idee, wie man Punkt 1) und 2) geschickt umsetzen kann? Denkanstöße?

    Ist der Datenbankaufbau schon grundlegend falsch?
    Gibt es eine einfache Möglichkeit, die DGVs richtig zu Filtern?

    Ich würde mich sehr freuen, wenn jemand eine gute Idee hätte und mir weiterhelfen könnte.

    Vielen Dank schonmal an alle, die bis hierhin gelesen haben...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „bärbel“ ()

    Hallo hlghyr,

    vielen Dank für deine Antwort. Also ich hab mich oben wohl zu umständlich ausgedrückt: ein Anbieter hat zwar mehrere Zonen, aber in aller Regel sind die Zoneneinteilungen der verschiedenen Anbieter nicht identisch. Das heißt, es ist hier keine m:n Beziehung, oder doch?

    1 Anbieter : m Zonen
    1 Zone : 1 Anbieter

    :(

    bärbel schrieb:

    Das heißt, es ist hier keine m:n Beziehung, oder doch?

    Doch. Du musst nur eine Stufe tiefer gehen. Eine "Zone" ist ja nur eine (beliebige) Zusammenfassung von Ländern. Du wirst ja den Preis auch sicherlich für ein konkretes LAND wissen wollen (da der suchende ja nicht von x Anbietern die Zonierung kennt und somit nicht direkt suchen kann). Also hast du letztlich n Länder und m Anbieter

    BTW: Deine Grafik ist SEHR klein. Besser als Dateianhang in lesbarer Größe dazupacken ;)
    Hallo picoflop, hallo hlghyr,

    vielen Dank für eure Antworten. Ich verstehe zwar was ihr sagt denn ihr habt ja Recht: wenn man beachtet, dass eine Zone aus Ländern besteht und jedes Land im Endeffekt von mehreren Anbietern bedient wird, dann ist es eine m : n Beziehung.

    1 Anbieter : m Länder
    1 Land : n Anbieter

    Nur weiß ich nicht, welchen Schluss ich jetzt daraus ziehen soll... Ich weiß, dass man m : n Beziehungen mit einer dritten Tabelle in 1 : m + n : 1 Beziehungen auflösen kann. Aber mal auf meinen konkreten "Datenbank"-Aufbau bezogen (anbei mal in größer), was heißt das? So wie ich es im Moment aufgeteilt habe, liegen doch nur 1 : m Beziehungen vor. Ich nehme ein wenig Redundanz in Kauf, weil ich keine eigenständige Ländertabelle habe und in der Zonentabelle dann z.B. das Zielland "China" 10 mal vorkommt, weil es von jedem Anbieter bedient wird.

    Hmmm...ich steh auf diversen Schläuchen und werde wohl oder übel 10 Zonentabellen und 10 Preistabellen anlegen und diese mit der Haupttabelle Preismatrix verknüpfen. Dann klappt ja immerhin Punkt 1) (erster Beitrag), und Preismatrizen können angelegt und verändert werden. Aber das erscheint mir so suboptimal...




    So hatte ich gehofft, es hinzukriegen... ----------------------- Und eine solche Form soll abgebildet werden.

    Problem dabei wie gesagt : die einzelnen DGVs für die Zonen sind nicht unabhängig voneinander. Wähle ich in der ersten 'Zonen-DGV' ein Land aus, dann wird das auch in den anderen DGVs ausgewählt, ebenso mit den Preisen. Sie sind halt verknüpft weil sie alle von der selben Tabelle stammen.. :o(
    Wenn ich versuche mit einer DataView zu filtern um z.B. in der ersten nur Länder mit "Zone1" anzuzeigen, dann geht das zwar, die DGV ist dann aber komplett unabhängig von der Preismatrixauswahl (DGV ganz links oben) und ich glaube das speichern wäre dann auch sehr kompliziert.
    Wenn ich mit dem Filterassistenten der DGV filtere, dann gilt das für alle DGVs, die an der Zonentabelle hängen....also auch keine Lösung.

    :o(((( Kennt jemand vielleicht ein gutes Tut zu diesem Thema? Schaue mir gerade die MS "How do I" Seite für VB an...falls jemand Lust darauf hat: msdn.microsoft.com/en-us/vstud…226.aspx#formsoverdata_08

    bärbel schrieb:

    Kennt jemand vielleicht ein gutes Tut zu diesem Thema?

    Das ist doch eine hervorragende Addresse, die du da zu Rate ziehst.
    Viel was besseres kann man dir glaub nicht anbieten, denn mir scheint, dass dir die notwendigen Grundsätze durchaus klar sind.

    Jetzt heisstes, die Grundsätze auch anzuwenden, und nicht aus "Bequemlichkeit" (das wird glaub nämlich was anneres als "bequem") so Schmuddel-Lösungen in Betracht zu ziehen:
    ... und werde wohl oder übel 10 Zonentabellen und 10 Preistabellen anlegen und diese mit der Haupttabelle Preismatrix verknüpfen...

    Das Datenmodell ist ja sogar schon angeklungen:

    Anbieter->Zone->Land
    Gewichtsklasse->Preis
    Zone->Preis

    Die m:n - MittlerTabelle ist also Preis, zwischen Zone und Gewichtsklasse

    Das knifflige ist nun, dass deine Preisabfrage nach dem Preis für Gewichtsklasse und Land fragt (nicht Zone), und also erstmal die Zonen daraufhin filtern muß, ob das Land auch drinne ist.

    Aber ich glaub dassis machbar.
    Hi!
    Schau Dir mal das an! Entity Framework und das!Datenbinding
    Auch gibt es ein sehr gutes Video für Datenbanken.Datenbanken. Das ist auch sehr zu empfehlen:Sql Management Studio
    So das erst mal vorne weg.
    Ich lerne auch erst seit Kurzen mit Datenbanken um zu gehen. Deshalb hab ich mich auch für diese Technologie entschieden.
    Ob sie gut ist oder nicht kann ich nicht sagen, da ich keine Vergleiche habe.
    Zu Deinen Problem kann ich nur sagen, das Du dieses auf jeden Fall falsch angehst.
    Aus eigener Erfahrung kann ich Dir sagen, das es nichts bringt, irgend etwas zusammen zu manschen und sich zu sagen, es wird schon klappen. das wird sich immer rächen. Spätestens bein coden merkst du dann, das es mist ist. Und noch später drückst Du dann Shift+Entf(vor Wut)
    Schau Dior die Videos an und Dir geht wieder ein(e) Licht(erkette)auf(an).
    Hi,

    hlghyr (ist das eine Abkürzung für etwas?), vielen Dank für die Videolinks! :thumbup: Ich schaue mir gerade das zum Thema Entity Framework an und staune.

    ErfinderDesRades, Du hast (natürlich) recht dass es nicht clever wäre, eine Schmuddel-Lösung umzusetzen..dass ich mich zu diesem Schritt gezwungen sah lag vor allem an hoher aufgestauter Frustration ("das muss doch irgendwie einfacher gehen....Warum geht das nicht...") gepaart mit dem mangelnden tieferen Wissen ("Hmmm....häääh?"). Die Frustration wäre durch die Schmuddel-Lösung wohl nur verstärkt worden..

    Ich weiß womit ich mein Wochenende verbringe: Basic-Skills aufrüsten. Dafür hab ich erstmal genug Material & Themengebiete an die Hand bekommen, merci für die Tipps hlghyr. Früher oder später melde ich mich nochmal zurück, im Idealfall mit einer Lösung, ansonsten mit ein paar Fragen :o)

    Danke!
    Wenn ich mich nicht irre beherrscht doch das Entity Framework jetzt das Code First.
    Irgendwie hatte ich da mal was aufgeschnappt. POCO viel auch noch. Aber so weit bin ich noch nicht.

    hlghyr= Helge Heyer ohne die "e" und Leerzeichen
    Hallo :(

    ich habe mich jetzt ein bisschen mit dem Entity-Framework und dem Drag & Drop-Data-Binding beschäftigt, das ist schon sehr komfortabel, vor allem für Anfänger wie mich. Wenn ich eine Anwendung mit genau einer DGV / Combobox / .. für Tabellen in der DB anlege, dann gibt es auch keine Probleme.

    Aber ich habe leider immer noch keine Idee, wie ich ein einelnes table aus einem DataSet praktikabel in mehreren DGVs gleichzeitig anzeige, so dass diese unabhängig voneinander + filterbar sind, und {Speichern / Ändern / Hinzufügen} funktioniert...

    Das Datenbank-Schema habe ich leicht geändert. Aber bestimmt ist da auch schon was falsch...

    Weiß jemand Rat? :(

    bärbel schrieb:

    Aber ich habe leider immer noch keine Idee, wie ich ein einelnes table aus einem DataSet praktikabel in mehreren DGVs gleichzeitig anzeige, so dass diese unabhängig voneinander + filterbar sind, und {Speichern / Ändern / Hinzufügen} funktioniert...

    dafür sind BindingSources zuständig.

    Eine BindingSource abstrahiert ein ListenControl, wie etwa das DatagridView.
    man bindet also ein DGV an eine BindingSource, und die BS an die eigliche Datenquelle, oder an eine annere BindingSource.
    Dann kann man an der BindingSource Filter setzen, Sortierung, die Current - Property abrufen, und auch die sortierten, gefilterten Daten.
    Werden 2 DGVs an dieselbe BS angeschlossen, so arbeiten sie synchron - hat jedes seine eigene BS, so sind sie voneinander unabhängig, es sei denn die eine BS ist DataSource der anneren. In letzterem Fall entsteht ein Parent-ChildView - siehe untiges Tut.
    Man kann aber auch Comboboxen anschließen, oder sogar DatagridViewComboboxColumns (und erhält in jeder Zelle der Spalte eine Combobox).

    Guggemal die vier Views (WinForms) - da ist das Prinzip erläutert und demonstriert.

    Mittm EF gehts prinzipiell genauso, nur eben ganz anners ;)

    Witz - ist schon anners, aber das Tut diene dir als Vorlage, dass du weißt was möglich ist, und wie einfach es ist.
    Wenn deine EF-Versuche sich komplizierter gerieren, ist das ein Hinweis, dass was falsch läuft.

    Beachte: Beim EF heißts nicht mehr Dataset, sondern ObjectContext, und das heißt nicht nur anners, sondern ist es auch.
    ZB ruft der OC automatisch im Hintergrund die erf. Daten ab, wo man bei Dataset die DataAdapter immer explizit anweisen muß.

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