Ich habe mich umgesehen, und kann nicht ganz finden, was ich brauche.Bind Combobox zu Parent DataRelation und aktualisieren, wenn 2. Elternteil ändert
Ich habe einen DB mit (neben anderen) 3 Tabellen.
SchemeType
Scheme
Type
SchemeType
enthält Fremdschlüssel zu den Primärschlüssel und sowohl Scheme
Type
I haben eine 2 Comboboxen NET 3.5 WinForm enthält.
One zeigt die Schemes
ich die andere möchte die deutliche Types
, die für die ausgewählten Scheme
in der SchemeType
Tabelle vorhanden angezeigt werden soll.
Ich habe eine DataSet
, die alle Einträge für alle 3 Tabellen enthält und DataRelations für die Primary-Foreign-Schlüsselbeziehungen eingerichtet haben.
Ich verwende BindingSources, um die Comboboxes zu füllen, aber kann nicht herausfinden, wie die Type
Combobox zum Aktualisieren der Inhalte erhalten, wenn ich die Scheme
Combobox ändern.
Ich kann dies mit einer geraden Eltern-Kind-Beziehung tun, aber kann nicht herausfinden, wie die Eltern-Kind-Eltern-Beziehung zu kodieren.
Hier ist mein Code, mit unnötigen Sachen
Dim DS As New DataSet("myDS")
Dim SchemeBndSrc As New BindingSource
Dim TypeBndSrc As New BindingSource
Using cmd As New SqlCommand("myStroedProc", _conn)
cmd.CommandType = CommandType.StoredProcedure
Using adp As New SqlDataAdapter(cmd)
adp.Fill(DS)
End Using
End Using
' Name the tables
DS.Tables(0).TableName = "Scheme"
DS.Tables(1).TableName = "Type"
DS.Tables(2).TableName = "SchemeType"
Dim rel As New DataRelation("Scheme-SchemeType", _
DS.Tables("Scheme").Columns("SchemeID"), _
DS.Tables("SchemeType").Columns("SchemeID"), _
True)
Dim rel2 As New DataRelation("Type-SchemeType", _
DS.Tables("Type").Columns("TypeID"), _
DS.Tables("SchemeType").Columns("TypeID"), _
True)
DS.Relations.Add(rel)
DS.Relations.Add(rel2)
' Scheme
' Set up the binding source
SchemeBndSrc.DataSource = DS
SchemeBndSrc.DataMember = "Scheme"
' Bind the bindingsource to the combobox
cboScheme.ValueMember = "SchemeId"
cboScheme.DisplayMember = "SchemeName"
cboScheme.DataSource = SchemeBndSrc
cboScheme.SelectedIndex = -1
' Type
' Set up the binding source
TypeBndSrc.DataSource = SchemeBndSrc
TypeBndSrc.DataMember = "Type-SchemeType"
' Bind the bindingsource to the combobox
cboType.ValueMember = "TypeID"
cboType.DisplayMember = "TypeDesc"
cboType.DataSource = TypeBndSrc
cboType.SelectedIndex = -1
Der Typ Combobox alle Elemente enthält nicht gezupft, obwohl es in mindestens 1 Punkt sein sollte. Wenn ich die DataRelation austausche, wird sie dem DataSet nicht hinzugefügt, da das Elternelement in diesem Fall (SchemeType) keine eindeutigen Einträge für TypeID hat.
Kann mir bitte jemand helfen?
Ah, danke. Ich hatte Angst, dass es manuell sein müsste, aber ich wollte überprüfen, dass es keinen automatischen Weg gab, den ich vermisst habe. Bin ich richtig, dass ich nicht in der Lage bin, die ausgewählten Werte jeder Kombination zu binden, um den Prozess SQLDataAdapter.Update verwenden zu können? –
Ich bin nicht 100% sicher, was die Auswirkungen wären, ohne zu testen. Ich bin mir nicht sicher, ob Sie die Bindung sowohl zum Filtern als auch zum Aktualisieren verwenden könnten. – jmcilhinney