我正在构建一个winforms应用程序,我有两个具有相同数据源的组合框,数据源是DataTable。现在,当我在一个组合框中选择一个值时,另一个组合框的值也会改变。有没有办法让它改变而不影响其他?具有相同数据源的两个控件的问题
回答
在这种情况下,您可以创建两个不同的绑定源,一个绑定到每个组合框。如果您将每个绑定数据源的DataSource
属性设置为您的DataTable
,那么您的组合框将独立工作,同时仍显示相同的数据。
的初始化会是这样的:
// Initialization of the binding sources(assuming dataTable is a populated DataTable)
bindingSource.DataSource = dataTable;
bindingSource2.DataSource = dataTable;
的WinForms的结合系统检测两个组合框被挂接到相同的数据源和是(有益)跨越两个同步变化。
为了避免这种情况,您需要确保每个组合框都有独特的数据源。
一种方法是使用工具箱中的相应非可视组件(BindingSource)。
另外,如果您正在设置与代码的绑定,则使用BindingList。请注意,有一个陷阱用的BindingList - 它可以充当包装:
[的]的BindingList构造函数创建周围的原始名单的包装集合。它不创建包含相同元素的新列表。 (我从来没有见过这种记录,但已经用Reflector验证过)。 - http://www.nichesoftware.co.nz/blog/200809/databinding-lists
相反的:
editDebitAccount.DataSource = accountsList;
editCreditAccount.DataSource = accountsList;
使用本:
editDebitAccount.DataSource = new BindingList(accountsList);
editCreditAccount.DataSource = new BindingList(accountsList);
>> WinForms绑定系统正在检测到两个组合框都连接到相同的DataSource,并且(有用地)同步跨越这两个变化。<<我明白了,但是为什么?这是没有意义的,因为组合框包含选定的项目,而不是数据源。 – TheBlastOne 2011-09-01 08:08:43
这可能是令人惊讶的,但它是它的工作方式。当两个组合框具有相同的DataSource集合时,它们最终会共享相同的[CurrencyManager](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.currencymanager.aspx)。 CurrencyManager指定列表中的“当前”位置,并且两个组合框同步。 – Bevan 2011-09-01 09:06:42
- 1. 奇怪的两个控件/相同的数据源问题
- 2. RadWindowManager,RegisterScriptControl和具有相同ID问题的多个控件
- 3. d3中有两个数据源的工具提示问题
- 4. WPF:当在两个控件上使用相同的数据源时出现奇怪的数据绑定问题
- 5. 访问 - 合并具有相同结构的两个数据库
- 6. 问题:如果数据源具有相同的数据,则不绘图图形
- 7. 实体框架:具有相同类问题的两个属性
- 8. 具有相同数据的两个MYSQL表具有不同的大小
- 9. 具有相同数据但不同类型的两个向量
- 10. 具有相同的数据
- 11. 合并两个数据库具有相同的设计(MySQL的)
- 12. 来自两个具有相同列名的表的数据
- 13. 插入到两个表具有相同的数据库,但shaing相同的ID
- 14. 两个具有相同obj文件
- 15. 具有相同类型实体但数据库不同的多个数据源
- 16. 从两个具有相同列的表中选择数据
- 17. 具有相同数据库的两个rails应用程序?
- 18. 数据库规范化 - 两个具有相同主键的表?
- 19. 实体框架 - 具有相同数据的两个人
- 20. 使两个输入具有相同的数据值?
- 21. 具有相同数据库的两个portlet
- 22. 比较两个具有相同数据名称的饼图(Highcharts)
- 23. 两个选择具有相同的数据
- 24. 检查两个QSharedPointer具有相同的数据
- 25. 如何使用具有相同别名(modx)的两个资源?
- 26. 具有不同资源URL的相同数据类型(AngularJS)
- 27. 两个UIView具有相同的锚点
- 28. 具有相同列的两个TableLayout
- 29. 两个端口具有相同的PID
- 30. 两个Datagrids具有相同的源,但输出的结果略有不同
嗨特里,如果您从您的问题的代码标签,它会更简单易读。 :) – 2009-11-01 18:54:10