组合框的奇怪行为需要说明

时间:2011-01-21 13:14:09

标签: .net vb.net combobox datasource

我刚刚编写了一个Windows应用程序,它填充了来自同一数据源的三个组合框。我的数据源是一个数据表。

我填充组合框的方法是为每个组合框重复以下代码:

'populate 1st combobox
cbx1.DataSource = table
cbx1.DisplayMember = "someColumn"
cbx1.ValueMember = "anotherColumn"
cbx1.SelectedIndex = Indx

'populate 2nd combobox
cbx2.DataSource = table
cbx2.DisplayMember = "someColumn"
cbx2.ValueMember = "anotherColumn"
cbx2.SelectedIndex = Indx

'populate 3rd combobox
cbx3.DataSource = table
cbx3.DisplayMember = "someColumn"
cbx3.ValueMember = "anotherColumn"
cbx3.SelectedIndex = Indx

当应用程序运行时,我从cbx1的下拉列表中选择一个项目,我的选择也反映在cbx2和cbx3中。我发现这种行为很奇怪,如果有人能解释幕后发生的事情,我将不胜感激。

另一方面,我已经能够通过修改我的代码来解决这个问题,如下所示,但仍然希望对这种看似奇怪的行为有一个解释。

'populate 1st combobox
Dim t1 as datatable = table.Copy
cbx1.DataSource = t1
cbx1.DisplayMember = "someColumn"
cbx1.ValueMember = "anotherColumn"
cbx1.SelectedIndex = Indx

'populate 2nd combobox
Dim t2 as datatable = table.Copy
cbx2.DataSource = t2
cbx2.DisplayMember = "someColumn"
cbx2.ValueMember = "anotherColumn"
cbx2.SelectedIndex = Indx

'populate 3rd combobox
Dim t3 as datatable = table.Copy
cbx3.DataSource = t3
cbx3.DisplayMember = "someColumn"
cbx3.ValueMember = "anotherColumn"
cbx3.SelectedIndex = Indx

2 个答案:

答案 0 :(得分:1)

行为并不那么奇怪 - 你有三个组合框都绑定到同一个数据源,所以当你在第一个组合框中选择一个值时,你正在改变底层数据源中当前记录的索引 - 由于其他两个组合框都与此绑定,它们也会更新。

编辑:在幕后,行为的原因是如何在.Net框架中实现数据绑定 - 请参阅this question以获取更详细的说明。

正如您所发现的,解决方案是为每个组合框使用单独的数据源。有一个相关的问题here,您可能会感兴趣。

答案 1 :(得分:0)

这是因为您已将相同的数据表实例分配给组合框。