2 Datagridview's mit gleichem Tabeladapter und unterschiedlichen Select-Befehlen

  • Allgemein

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von markus182.

    2 Datagridview's mit gleichem Tabeladapter und unterschiedlichen Select-Befehlen

    Hallo zusammen,





    ich habe in meinem GUI 2 Datagridviews, die beide mit der selben Tabelle einer Datenbank verbunden sind.


    In der einen Tabelle wird nur ein Foreign Key angezeigt (das funktioniert auch), in der anderen soll genau ein Datensatz der Tabelle selektiert werden (Filter für 2 Foreign Keys). Die Tabelle besteht aus einem Primary Key und zwei Foreign Keys.

    Das ist der Befehl für das erste Datagridview:


    VB.NET-Quellcode

    1. this.tragkonstruktionLageKombinationTableAdapter.FillByID(this.feuerschutzproduktpaletteDataSet1.tragkonstruktionlagekombination, Convert.ToInt32(dataGridViewTragkonstruktion.Rows[e.RowIndex].Cells[e.ColumnIndex].Value));







    Was muss ich tun, damit ich das 2. datagridview unabhängig vom 1. füllen kann?



    LG und schonmal danke

    Markus
    ok.
    ich muss dazu sagen, dass ich c# nicht wirklich gut kann - hab da nur einen crashkurs bekommen.
    hab an der uni nur c++ gelernt.
    die binding source wird ja automatisch erstellt, wenn ich das dgv mit der datenbank-tabelle verknüpfe.
    muss ich dann für die 2. tabelle manuell eine binding source einfügen?
    also machema weiter mitte crashkurse:
    Ein DGV hängt an einer BindingSource. Genau: Mehrere DGVs können auch an derselben bs hängen. Sie verhalten sich dann synchron, was den angewählten Datensatz ("Current") angeht.
    Eine BindingSource hängt an einer DataTable. Genau: Mehrere BindingSourcees können auch an derselben DataTable hängen. Sie zeigen dann dieselben Daten, ggfs. unterschiedlich gefiltert/sortiert - und jede bs verwaltet einen eigenen aktuellen Datensatz ("Current").

    EinTableAdapter befüllt die DataTable.

    Es hat also keinen Sinn, eine DataTable durch 2 Selects zu befüllen, denn die Befüllung des zweiten löschst die vorherige Befüllung - oder ist das beabsichtigt?

    Es hat auch keinen Sinn, Schlüsselspalten anzuzeigen, weder Primkeys noch ForeignKeys.

    Also was willst du eiglich erreichen - was soll der User schließlich mit deine beiden DGVs anfangen können?
    puhh, wo fang ich da am besten an zu erklären:S







    es handelt sich bei dem Programm um ein Tool um Prüfberichte für Brandschutzabschlüsse zu verwalten.



    Dazu gehört unter anderem eine Tragkonstruktion, in der der Abschluss eingebaut ist.



    Der User wählt zuerst eine solche aus oder erstellt eine neue. Der Primarykey der ausgewählten Konstruktion wird dann in einer Textbox angezeigt.



    Als nächstes muss der User dann die Befestigungspunkte festlegen. Hierfür gibt es eine eigene Tabelle, die den Befestigungspunkt (oben, unten, rechts, links) sowie eine Längenangabe mit einem bestimmten Bezugspunkt enthält. Außerdem handelt es sich bei der Tabelle um eine aufgelöste Beziehung (eine Tragkonstruktion kann mehrere Befestigungspunkte haben).



























    Die Tabelle in Schritt 2 besteht aus dem Primary Key, sowie den Foreign Keys TragkonstruktionID und LagekombinationID.



    Wenn der User in Schritt 1 eine Konstruktion auswählt, werden in Tabelle 2 alle Datensätze angezeigt, die diese TragkonstruktionID als Foreign Key haben.



    In Schritt 2 wird eine Lagekombination ausgewählt (falls bereits vorhanden). Deren Befestigungspunkte werden in der Tabelle bei Schritt 3 angezeigt.



    Der entscheidende Schritt (da hakt es bei mir) ist die Textbox rechts neben Tabelle 1. Meine Idee wäre ein (nicht sichtbares) DGV, das ebenfalls mit der Tabelle wie das DGV aus Schritt 2 verknüpft ist.



    Mittels entsprechendem Select-Befehl soll dann nur der Datensatz angezeigt werden (bzw der Primary Key), der die ausgewählte Tragkonstruktion- und LagekombinationID enthält.



    Ich hoffe du kannst einigermaßen folgen:)


    Edit:

    Hier noch das UML Diagramm:

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

    für mein Verständnis ja, aber für dein Verständnis ist wichtig, das typDataset mal kennenzulernen - findest du die entsprechende Ansicht?

    So, nun zum Workflow, oder wie man das nennt.
    Als erstes: vergiss die Textboxen, Datagridviews und überhaupt alle Controls. Haben mit der Datenverarbeitung nix zu tun.

    Also der User wählt zunächst einen Prüfbericht.
    Dem fügt er eine oder mehrere Konstruktionen zu, deren jede eine Tragkonstruktion spezifizieren, sowie mehrere Lagekombinationen

    Ich habe keine Ahnung, wovon ich rede, aber isses soweit richtig?

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

    gut, da sehen wir gleich, dass in deinem Dataset gar keine Relationen definiert sind.
    Im Uml sind sie definiert, im dataset nicht - dassis Crap
    Ich hoffe, in der DB sind die Relationen auch eingerichtet, und zwar mit referentieller Integrität und Löschweitergabe.

    guggemol "Datenbank in 10 Minuten" auf Movie-Tuts, oder besser noch "DatasetOnly" auf Movie-Tuts - wir wollten ja die crashkurse fortsetzen ;)
    jo, du musst die Tuts durchmachen, um zu kapieren, wie man DataRelations im typDataset anlegt.
    Das typDataset muß die Datenbank strukturell 1:1 wiederspiegeln, sonst wirddatnix.

    Der DBProvider (vmtl. MySql) ist eigentlich irrelevant, nur bei MySql trau ich der Integration ins VisualStudio nicht recht.
    Bei anderen Providern werden beim Generieren des typdatasets automatisch schoma die richtigen Relationen mit-generiert.
    richtig - siehe post#4

    aber auch irrelevant.
    Ganz grundsätzlich ists immer falsch, in einer Anwendung Schlüsselspalten anzuzeigen - da gibts bessere Möglichkeiten.
    Im Detail kannich noch nix dazu sagen, solange du nicht meine Frage beantwortest, ob ich den Workflow richtig verstanden habe (post#8).
    Auch braucht man nicht weiterzumachen, solange die Datarelations nicht korrekt eingerichtet sind.

    Du könntest deine anwendung auch zippen und anhängen, und ich könnte daraus eine Dataset-Only-Anwendung basteln, die im groben die Funktionalität deines Tools schoma umsetzt.

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

    Sorry, hab ich total übersehen.

    Also der User wählt zunächst einen Prüfbericht. (Er erstellt einen neuen)
    Dem fügt er eine oder mehrere Konstruktionen zu (die tabelle gibt es nicht), deren jede eine Tragkonstruktion spezifizieren, sowie mehrere Lagekombinationen (es können mehrere Lagekombinationen zu einer Tragkonstruktion existieren. Ausgewählt wird aber nur eine)

    markus182 schrieb:

    Dem fügt er eine oder mehrere Konstruktionen zu (die tabelle gibt es nicht)

    Doch, die Tabelle gibts durchaus - sie heißt bei dir "TragKonstruktion_Lagekombination".

    sowie mehrere Lagekombinationen (es können mehrere Lagekombinationen zu einer Tragkonstruktion existieren. Ausgewählt wird aber nur eine)
    wattn nu: eine Lagekombination pro TragKonstruktion_Lagekombination oder mehrere?
    Ist wichtig, und evtl. ein Fehler im Datenmodell.
    Sorry, hab's glaub ich falsch formuliert.
    Es gibt immer genau eine TragkinstruktionLageKombination.
    Der Grund, dass das ganze so aussieht ist der, dass jedem Prüfbericht ja eine Tragknstruktion mit einer bestimmten Lagekombination zugeordnet wird.
    Falls in einem anderen Prüfbericht die gleiche Tragkonstruktion (aber mit einer anderen Lagekombination) vorkommt, würde man ja auch den ersten Datensatz ändern, wenn man diesen ändert. Deshalb ist das so kompliziert anmutend aufgesplittet.
    Sprich ja, eine Lagekombination pro TragonstruktionLageKombination.

    Übrigens schonmal ein großes Danke, dass du dich meinem Problem so umfassend annimmst!
    also wenns pro Prüfbericht nur eine TragkinstruktionLageKombination gibt, dann ist die Relation falsch rum eingerichtet.

    Meine Schreibweise für 1:n - Relationenen ist übrigens '->'

    Also 1:n Relation Prüfbericht->TragkinstruktionLageKombination - 1-Seite ist Prüfbericht, n-Seite ist TragkinstruktionLageKombination

    Also umgekehrt zu deiner Uml-Notation.

    Jedenfalls du sagst: "Ein Prüfbericht enthält genau eine TragkinstruktionLageKombination, eine TragkinstruktionLageKombination kommt in mehreren Prüfberichten vor."

    Das bedeutet logisch folgende Relation:
    TragkinstruktionLageKombination->Prüfbericht

    Also ist dein Datenmodell an diesem Punkt falschrum verdrahtet.

    Ich empfehle dringend: vergiss die ganze Datenbank dahinter, und entwickel deine Anwendung zunächstmal DatasetOnly - DB-Programmierung ohne Datenbank

    So kannst du viel einfacher Veränderungen am Datenmodell vornehmen, und auch das ganze Theater mit den DB-Zugriffen haste dadurch zunächstmal vom Hals.
    Später kannste immer noch eine DB hinterlegen, falls nötig.

    Jetzt jdfs. musst du erst das richtige Datenmodell konzipieren, und sonst garnix: keine Textboxen, kein DGV, kein Auswählen, v.a. keine DB.

    Datenmodell konzipieren und im typDataset einrichten.
    (ich liebe typDataset, weil das ist wie ein Uml-Tool, nur dass es den zugehörigen Code gleich mit-generiert)

    Ebenfalls dringend empfehle ich, dass du möglichst kurze Bezeichnungen wählst, denn die generierten CodeNamen sind alle noch ein Stück länger, und wenn du am Schluss mit Codezeilen wie

    VB.NET-Quellcode

    1. TragKonstruktion_LagekombinationTableAdapter.FillbyTragKonstruktion_LagekombinationID(this.feuerschutzproduktpaletteDataSet1.TragKonstruktion_Lagekombination,this.feuerschutzproduktpaletteDataSet1.TragKonstruktion_Lagekombination [0].TragKonstruktion_LagekombinationID);
    rauskommst, wirste iwann ziemlich fluchen, könntichmirvorstelln ;)

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