【发布时间】:2016-09-01 10:19:21
【问题描述】:
我环顾四周,找不到我需要的东西。
我有一个带有(以及其他)3 个表的数据库。SchemeTypeSchemeType
SchemeType 包含Scheme 和Type 的主键的外键
我有一个包含 2 个组合框的 .NET 3.5 WinForm。
一个显示Schemes
我希望另一个显示存在于SchemeType 表中的不同Types 用于选定的Scheme。
我有一个DataSet,其中包含所有 3 个表的所有条目,并为主外键关系设置了 DataRelations。
我正在使用 BindingSources 来填充组合框,但是当我更改 Scheme 组合框时,我无法弄清楚如何让 Type 组合框刷新其内容。
我可以使用直接的父子关系来做到这一点,但不知道如何编码父子关系。
这是我的代码,去掉了不必要的东西
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 的唯一条目。
有人可以帮帮我吗?
【问题讨论】:
标签: c# vb.net winforms combobox datarelation