我有2个组合框,每个组合框都绑定到相同的DataTable:
channelTypeCB.DataSource = SynergyData.ds.Tables["ChannelTypes"];
channelTypeCB.DisplayMember = "channelType";
channelTypeCB.ValueMember = "channelTypeID";
channelTypeCB.BindingContext = new BindingContext();
newSKChanTypeCB.DataSource = SynergyData.ds.Tables["ChannelTypes"];
newSKChanTypeCB.DisplayMember = "channelType";
newSKChanTypeCB.ValueMember = "channelTypeID";
newSKChanTypeCB.BindingContext = new BindingContext();
当我单击按钮将记录插入数据库时,我使用channelType.SelectedValue ...返回不正确的值。我觉得它与使用ComboBox排序(我在设计视图中设置控件的属性中)有关。有没有人遇到过这个问题?
这是使用C#
为winforms应用程序编程的编辑:
例如,我的数据表存储的值如下:
channelType channelTypeID Web 2 Mailer 3 Catalog 4
这是在组合框中排序的,当我选择第一个项目(排序时为“目录”)时,SelectedValue返回2,当我选择第二个项目时它返回3 ....我本来期望的“目录“返回4
答案 0 :(得分:5)
MSDN ComboBox.Sorted
可能与此相关
尝试设置Sorted属性 在数据绑定控件上提出了一个 ArgumentException的。你必须排序 使用基础数据模型的数据。
(虽然没有收到任何错误)
所以我没有使用ComboBox.sort,而是对DataTable的DefaultView进行排序:
SynergyData.ds.Tables["ChannelTypes"].DefaultView.Sort = "channelType";
不相信这是最好的方法,但它有效,现在selectedValue返回正确的东西
答案 1 :(得分:1)
当您需要引用newSKChanTypeCB.SelectedValue时,您可能在代码中引用channelTypeCB.SelectedValue(这是完全基于您的控件名称的猜测)。
答案 2 :(得分:1)
我会这样做:我会创建2个单独的BindingSource
,每个DataSet
基于您的DataSource
,然后将每个控件BindingSource
绑定到相应的{{1}}刚刚创建。
答案 3 :(得分:0)
这是.net
中的已知问题请注意这个以便在.net 5中修复它: http://connect.microsoft.com/VisualStudio/feedback/details/542353/combobox-selectedvalue-returns-incorrect-data-when-sorted-is-true
答案 4 :(得分:0)
问题是ComboBox的Sorted属性,因为您的数据来自DataTable。
使用Sorted属性时,ComboBox仅组织DisplayMember并忽略其他数据,因为它无法直接修改DataTable。例如:
来自DataTable的数据作为没有排序的数据源
channelType channelTypeID ComboBoxDisplayMember ComboboxValueMember
Web 2 Web 2
Mailer 3 Mailer 3
Catalog 4 Catalog 4
现在使用Sorted Property
channelType channelTypeID ComboBoxDisplayMemberSorted ComboboxValueMember
Web 2 Catalog 2
Mailer 3 Mailer 3
Catalog 4 Web 4
这个问题可以在查询结束时添加的数据库中解决:“ORDER BY FieldName” http://technet.microsoft.com/en-us/library/ms188385.aspx