2009-10-03 133 views
3

我有2个组合框,每个绑定到同一个数据表,如下所示:净组合框绑定问题

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 ....我会有xpected“Catalog”返回4

+0

当你说“返回不正确的值”时,你是什么意思? – 2009-10-03 02:24:47

+0

例如,我在组合框中选择一个项目,并且channelType.SelectedValue确实没有返回正确的一个......这会将数据插入到我的数据库中,并将它们放入错误的类别(我三重检查数字) – 2009-10-03 02:41:10

回答

5

MSDN ComboBox.Sorted

可能与此

试图设置Sorted属性 上的数据绑定控件引发 ArgumentException的。您必须使用底层数据模型对 数据进行排序。

(没有得到任何虽然错误)

因此,而不是使用ComboBox.sort,我整理DataTable的默认视图:

SynergyData.ds.Tables["ChannelTypes"].DefaultView.Sort = "channelType"; 

不服气,这是最好的方法去它,但它的工作原理,现在选定的值返回正确的东西

+0

尼斯查找。这似乎是一个合理的方式去... – 2009-10-03 03:20:28

1

当您需要引用newSKChanTypeCB.SelectedValue(这是纯粹基于您的控件名称的总猜测)时,您可能会在代码中引用channelTypeCB.SelectedValue。

+0

明确引用正确的一个(channelTypeCB.SelectedValue)...它就好像DisplayMember正在排序,但ValueMember不是 – 2009-10-03 02:47:49

+0

尝试注释掉“.BindingContext = New BindingContext();”线。确切地说,不知道这是做什么,但它可能会删除正常的BindingContext(一个工作的)与一个空的不工作。 – MusiGenesis 2009-10-03 02:50:04

+0

事实上,这正是它在做什么......我会认为它只在DisplayMember上排序? ... ValueMember是单独排序的? – 2009-10-03 02:50:28

1

我会做到这一点是不同的:我将创建2个独立的BindingSource的,每个根据自己DataSet,然后DataSource每个绑定控件刚创建的各个BindingSource

+0

刚刚更新我的代码来使用这个,没有修复selectedIndex问题,但感谢您的建议。 – 2009-10-03 03:17:20

+0

selectedValue *我的意思是 – 2009-10-03 03:20:24

0

问题是ComboBox的Sorted属性,因为您的数据来自DataTable。

使用Sorted属性时,ComboBox仅组织DisplayMember并忽略其他数据,因为它无法直接修改DataTable。例如:

从数据表作为数据源的数据,而不排序

channelType channelTypeID ComboBoxDisplayMember ComboboxValueMember 
Web   2    Web      2 
Mailer   3    Mailer     3 
Catalog  4    Catalog     4 

现在Sorted属性

channelType channelTypeID ComboBoxDisplayMemberSorted ComboboxValueMember 
Web   2    Catalog      2 
Mailer   3    Mailer      3 
Catalog  4    Web       4 

这个问题可以在数据库中添加在查询的末尾来解决:“ORDER BY字段名” http://technet.microsoft.com/en-us/library/ms188385.aspx