我环顾四周,找不到我需要的东西。
我有一个带有(以及其他)3 个表的数据库。
SchemeType
Scheme
Type
SchemeType
包含两个主键的外键Scheme
和Type
我有一个包含 2 个组合框的 .NET 3.5 WinForm。
一个显示Schemes
我希望另一个显示该选定的表Types
中存在的不同。SchemeType
Scheme
我有一个DataSet
包含所有 3 个表的所有条目,并为主外键关系设置了 DataRelations。
我正在使用 BindingSources 来填充组合框,但是当我更改组合框时,我无法弄清楚如何让Type
组合框刷新它的内容Scheme
。
我可以用直接的父子关系来做到这一点,但无法弄清楚如何编码父子关系。
这是我的代码,去掉了不必要的东西
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
类型组合框不包含任何项目,即使其中应该至少有 1 个项目。如果我交换DataRelation,它不会将它添加到DataSet,因为在这种情况下(SchemeType)没有TypeID的唯一条目。
任何人都可以帮助我吗?