none
GridView & abhängige ComboBoxen RRS feed

  • Frage

  • Nabend,

    für die Erfassung von (Arbeits-)Zeiten soll ein GridView für die Eingabe der Daten sowie zur Anzeige verwendet werden. Auf Seite der Datenbank gibt es (vereinfacht) folgende Tabellen:

    Kunden -> Projekte -> Zeiten (jeweils 1:n)

    Die Anzeige via Grid soll folgendermaßen aussehen:

    Datum | Kunde (Combo) | Projekt (Combo) | Beginn | Ende | etc...

    ...dabei sollen sowohl "Kunde" als auch "Projekt" ComboBoxes sein, wobei die Projekte-Combo natürlich abhängig ist von dem Wert in Kunde-Combo.

    Habe das Ganze auch zum laufen bekommen, allerdings nur, wenn in der "Zeiten"-Tabelle jeweils zusätzlich zum Projekt noch der Kunde mitgespeichert wird, was ja nicht gerade schönes DB-Design ist:

    Zunächst werden einfach die beiden Combo-Columns an jeweils einen "KundenDataTable" und einen "ProjekteDataTable" gebunden (Im Prinzip stehen hier in "Projekt" erst mal alle Projekte, also nicht nur die des jeweiligen Kunden, was aber durch nachfolgenden Schritt nicht stört).

    Dann (beim Ändern oder Erzeugen neuer Datensätze) wird beim Klicken in "Projekt" eine neue DataGridViewComboBoxCell erzeugt, diese an einen DataTable gebunden, der gefiltert ist nach dem Wert der in der Kunden-Combo dieser Zeile steht (KundenID), und über GridView.Rows(e.RowIndex).Cells(e.ColumnIndex) = ComboGefiltert zugewiesen. Was ja, wie gesagt, funktioniert.

    Nur, wie kann ich obiges lösen, ohne den Kunden (die KundenId) jeweils in der Zeiten-Tabelle mitzuspeichern? Dann müsste ja beim "Anzeigen" des Grids für jede Zeile "rückwärts" von der ProjekteId der ensprechende Eintrag in einer nicht gebundenen(?) Kunden-Combo ausgewählt werden...?

    Danke und Grüße, Jan

    Samstag, 22. Januar 2011 00:46

Antworten

  • Nur, wie kann ich obiges lösen, ohne den Kunden (die KundenId) jeweils in der Zeiten-Tabelle mitzuspeichern? Dann müsste ja beim "Anzeigen" des Grids für jede Zeile "rückwärts" von der ProjekteId der ensprechende Eintrag in einer nicht gebundenen(?) Kunden-Combo ausgewählt werden...?

    Hallo zusammen,

    wen es interessiert, nach stundenlangem Rumprobieren habe ich es geschafft, eigentlich ganz simple Lösung: Separate Kommandos für Select und Update Statements (Select mit Join, Updates ohne Join nur auf eine Tabelle).

    Beim Select des ZeitenTable erstreckt sich die Abfrage über alle 3 Tabellen (Join), so dass in einer Zeile neben den anderen Spalten auch KundenId und ProjektID vorhanden sind. An diese sind die Combos über je einen eigenen Table gebunden (KundeTable, ProjekteTable).

    Somit funktioniert die Anzeige beim Laden des Grid schon mal. Nun wird beim Klick in die Projekte Combo eine neue DataView von ProjekteTable erzeugt und diese gefiltert nach der in der DataRow enthaltenen KundenId, und der ProjekteComboCell als DataSource zugewiesen.

    Beim Update (Insert, Update, Delete) jedoch wird ein eigenes Kommando verwendet, was sich *nur* auf die Zeiten Tabelle bezieht.

    Gruss, Jan

    • Als Antwort markiert Jan Kornblum Montag, 23. Mai 2011 06:54
    Montag, 23. Mai 2011 06:54