Windows窗体组合框显示和值不同步

时间:2019-02-04 16:05:40

标签: c# .net winforms data-binding combobox

我已经开发了一个小型应用程序,但是遇到了这个问题,所以我从一个干净的石板开始尝试并隔离它。到目前为止,我制作了一个非常简单的Windows窗体(VS 2017)应用程序,该应用程序连接到SQL数据表。在表单上,​​我有一个组合框,用于选择绑定到数据集的表行。我让它显示一个订单号,并将其值成员作为EntryID号,如图所示,它也是“选定值”。

Combo Box Data Settings

我在表单上也有一个简单的文本框,用于显示EntryID。

当我运行该应用程序时,组合框最初显示订单号的有序列表,如下所示:

enter image description here

在选择一个项目之前,如果我使用表单的工具栏选择器在列表中滚动,则EntryID文本框的值对应于组合框的值,因此Ord40选择最后一个数据集行(其中EntryID = 1003)。

但是,选择一个项目时,组合框列表的顺序会更改。例如,经过几次选择,我得到:

enter image description here

但是,如果我选择最后一个显示项“ Ord 20”,则我 still 获得数据行EntryID =1003。换句话说,尽管绑定的数据集没有更改,但组合框会加扰显示的项目。换句话说,如果组合框具有一组显示字段和一组对应的值字段,则显示字段文本将与基础值不同步。 我希望这是有道理的。这是直接的,开箱即用的,在新项目上没有更改的代码,我已经尝试了“选择值”属性的不同设置。 任何帮助将非常感激。 詹姆斯

1 个答案:

答案 0 :(得分:1)

您要将SelectedValue的{​​{1}}绑定到用作控件数据源的同一数据源。设置ComboBox仅用于显示下拉菜单中的项目。如果要更改绑定的属性/列的值,请设置DataSource

您永远不想将SelecetdValue绑定到用于SelectedValue的相同数据源。

仅作为示例,假设您具有以下表格:

  • DataSource
  • Product (Id, Name, CategoryId, Price)

然后,如果您想以Category (Id, Name)的编辑形式显示ComboBox的{​​{1}},则CategoryId的设置应为:

  • ProductcategoryIdComboBox
  • DataSourcecategoriesDataSource
  • DisplayMemberName
  • ValueMemberId