我已经开发了一个小型应用程序,但是遇到了这个问题,所以我从一个干净的石板开始尝试并隔离它。到目前为止,我制作了一个非常简单的Windows窗体(VS 2017)应用程序,该应用程序连接到SQL数据表。在表单上,我有一个组合框,用于选择绑定到数据集的表行。我让它显示一个订单号,并将其值成员作为EntryID号,如图所示,它也是“选定值”。
我在表单上也有一个简单的文本框,用于显示EntryID。
当我运行该应用程序时,组合框最初显示订单号的有序列表,如下所示:
在选择一个项目之前,如果我使用表单的工具栏选择器在列表中滚动,则EntryID文本框的值对应于组合框的值,因此Ord40选择最后一个数据集行(其中EntryID = 1003)。
但是,选择一个项目时,组合框列表的顺序会更改。例如,经过几次选择,我得到:
但是,如果我选择最后一个显示项“ Ord 20”,则我 still 获得数据行EntryID =1003。换句话说,尽管绑定的数据集没有更改,但组合框会加扰显示的项目。换句话说,如果组合框具有一组显示字段和一组对应的值字段,则显示字段文本将与基础值不同步。 我希望这是有道理的。这是直接的,开箱即用的,在新项目上没有更改的代码,我已经尝试了“选择值”属性的不同设置。 任何帮助将非常感激。 詹姆斯
答案 0 :(得分:1)
您要将SelectedValue
的{{1}}绑定到用作控件数据源的同一数据源。设置ComboBox
仅用于显示下拉菜单中的项目。如果要更改绑定的属性/列的值,请设置DataSource
。
您永远不想将SelecetdValue
绑定到用于SelectedValue
的相同数据源。
仅作为示例,假设您具有以下表格:
DataSource
Product (Id, Name, CategoryId, Price)
然后,如果您想以Category (Id, Name)
的编辑形式显示ComboBox
的{{1}},则CategoryId
的设置应为:
Product
:categoryIdComboBox
DataSource
:categoriesDataSource
DisplayMember
:Name
ValueMember
:Id