我希望能够拥有两个ComboBox,其中一个是第二个的父级或所有者。这意味着每当我在第一个ComboBox
中选择一个值时,第二个ComboBox
将过滤它的结果,以显示与第一个ComboBox
相关的相应值。
例如:
注意:此示例已经以编程方式完成...我想弄清楚如何使用Visual Studio的用户界面
我有一个包含两个DataTables的数据集,如下所示:
如您所见,我的BakerySubSectionsTableAdapter
中有一个名为 @FK_BakerySection 的参数。我想将其与BakerySection's
PK_BakerySection 属性相关联。
这是我目前的结果:
在TableAdapter中使用以下查询:
那么......我们如何使用用户界面为参数设置值?
答案 0 :(得分:3)
如果在两个表之间添加DataRelation
(IIRC,您可以在DataSet设计器中执行此操作),这很容易。
然后,您只需将第二个DisplayMember
的{{1}}设置为ComboBox
。
这是一个小而完整的例子:
ParentTable.NameOfRelation.NameToDisplay
只需确保Dim data = New DataSet()
Dim section = data.Tables.Add("Section")
section.Columns.Add("ID", GetType(Integer))
section.Columns.Add("Name", GetType(String))
Dim sub_section = data.Tables.Add("SubSection")
sub_section.Columns.Add("ID", GetType(Integer))
sub_section.Columns.Add("Name", GetType(String))
sub_section.Columns.Add("Section", GetType(Integer))
section.Rows.Add(New Object() {1, "Foo"})
section.Rows.Add(New Object() {2, "Bar"})
sub_section.Rows.Add(New Object() {1, "Sub Foo", 1})
sub_section.Rows.Add(New Object() {2, "Another Sub Foo", 1})
sub_section.Rows.Add(New Object() {3, "Sub Bar", 2})
sub_section.Rows.Add(New Object() {4, "bar bar bar", 2})
sub_section.Rows.Add(New Object() {5, "more bar", 2})
section.ChildRelations.Add("SectionToSub", section.Columns("ID"), sub_section.Columns("Section"))
Dim f = New Form()
Dim c1 = New ComboBox() With { _
.DataSource = data, _
.DisplayMember = "Section.Name", _
.ValueMember = "Id" _
}
Dim c2 = New ComboBox() With { _
.DataSource = data, _
.DisplayMember = "Section.SectionToSub.Name", _
.ValueMember = "Id" _
}
Dim fl = New FlowLayoutPanel()
fl.Controls.Add(c1)
fl.Controls.Add(c2)
f.Controls.Add(fl)
f.ShowDialog()
完全填充(不需要参数)。