【发布时间】:2012-08-03 12:50:24
【问题描述】:
将列表绑定到组合框后,其 dataSource.Count 为 5,但组合框项计数为 0。 怎么会这样?
我习惯于 Web 编程,这是在 Windows 窗体中。
所以不存在combo.DataBind(); 方法。
这里的问题是,我正在尝试以编程方式设置所选项目。由于我没有看到 combo.Items 集合已填充,因此我无法设置所需的项目。
更新
我猜需要全面更新:
- 数据源包含 7 项
- 当绑定到组合框时,
DisplayMember和ValueMember会得到适当的实现 - 数据绑定后,通过gui,我可以清楚的看到combobox中的7项
-
combobox.DataSource.Count = 7和combobox.Items.Count = 0
所以问题就在这里;因为在数据绑定之后,组合框的 ItemCollection 中没有任何项目;我无法搜索一个匹配并设置合适的。
这是一个更好理解的图像(但我很确定我错过了一些简单的东西)
【问题讨论】:
-
您是否相应地设置了
DataTextField和DataValueField? -
或
DisplayMember和ValueMember。 DataSource 中的数据类型是什么? -
是的,也许这个问题并不完全可以理解。数据绑定事件成功运行,我可以通过 gui 在组合中看到我的项目。问题是,在调试中;在数据源分配之后,组合框不包含 Items 集合中的某些内容。就像在渲染之后一样,所有的项目都显示出来了,但在那之前什么都没有。
-
当您创建一个新的
BindingSource时,所有的绑定都会独立于使用相同数据源的位置发生。即使您已将数据源绑定到 4 个其他控件,如果每个控件都有自己的BindingSource实例,它们每个都有自己的内部BindingContext来处理与该特定控件相关的状态/位置/事件。您只是通过明确告诉 ComboBox 使用新的 BindingContext 而不是让 BindingSource 处理它来解决它。 -
废话,抱歉,不是内部
BindingContext,而是内部CurrencyManager。刚看了一下源码。无论哪种方式,它都应该为每个使用的BindingSource单独处理事件,因为它有自己的CurrencyManager(同样,它在 BindingSource 本身中为指定的 DataSource 处理状态表示,即使 DataSource 在其他地方使用)。