Announcement

Collapse
No announcement yet.

M:N beziehung per bindingsource, combobox binden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • M:N beziehung per bindingsource, combobox binden

    Hallo zusammen,

    kann mir einer einen Tipp geben, wie ich eine n:m Beziehung per Bindingsource umsetze?

    z.b.: ich habe eine Tabelle "Orte", eine Tabelle "Arbeiten" und die Hilfstabelle "HT" in der ich die M:N beziehung zwischen "Orte" und "Arbeiten" umsetze

    ich habe:
    - 2 comboboxen (einmal für die Orte und einmal für die Arbeiten)
    - zur kontrolle eine datagridview
    dazu folgende bindingsourcen:
    - bsOrte
    - bsArbeiten
    - bsFK_HT_ORT (für die relation zwischen Orte und HT)

    Die Combobox "Orte" hat auch die bindingsource "Orte"
    das datagridview hat die bindingsource bsFK_HT_ORT

    wähle ich nun einen Ort in der combobox aus, zeigt er nur die datensätze in dem datagridview an, welche auch den ausgewählten ort haben.... soweit so gut.

    nur möchte ich nun, das in der comboxbox "Arbeiten" nur die Arbeiten angezeigt werden, welche auch in dem datagridview (bzw der bindingsource) nach der ortauswahl vorhanden sind.
    ich kann sehr wohl in der combobox die indexnummern anzeigen, aber ich will über die relation den sprechenden namen aus der Arbeit-tabelle angezeigt bekommen und nicht nur den Arbeitsindex aus der HT-tabelle

    um es anschaulicher zu machen:

    Ortetabelle:
    nr | name
    1 | Hier
    2 | Dort

    Arbeitstabelle:
    nr | name
    1 | lesen
    2 | laufen
    3 | essen


    HT:
    Ort | arbeit
    1 | 1
    1 | 2
    2 | 2
    2 | 3

    wähle ich nun in der combobox "Ort" den Wert "dort" aus, soll in der combobox nur "laufen" und "essen" stehen und nicht nur die ID 2 und 3

    man könnte das zwar auch über erneute fills/filter lösen, aber ich wüsste gerne, wie ich es über die relationen hinbekomme. kann mir da jemand helfen?

    schönen gruß
    chris

  • #2
    Hallo,
    das würde ich über einen SQL - join lösen und mir die sprechenden Namen darüber holen.
    Vorausgesetzt die Tabellen heißen "Orte" und "Arbeiten", könnte das so aussehen

    z.B.:

    Select Orte.*, Arbeiten.* from HT
    LEFT OUTER JOIN Orte ON HT.Ort = Orte.Nummer
    LEFT OUTER JOIN Arbeiten ON HT.Arbeit = Arbeiten.Nummer

    Dieses Select würde dann alle Kombinationen liefern, die dann auch noch per "where" eingeschränkt werden könnten.

    Will man alle Kombinationen ausschließen, für die es keine Relation gibt, würde es ein INNER JOIN tun.

    Comment

    Working...
    X