.Net ComboBox绑定问题

时间:2009-10-03 02:19:07

标签: .net combobox sorting selectedvalue

我有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

5 个答案:

答案 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)

答案 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