绑定组合框在(重新)填充数据源时更改 SelectedItem
Posted
技术标签:
【中文标题】绑定组合框在(重新)填充数据源时更改 SelectedItem【英文标题】:Bound Combobox changing SelectedItem when (re)filling Datasource 【发布时间】:2021-07-23 21:05:36 【问题描述】:我在 Winform 的 Comboboxes 上遇到了一个非常具体的行为。我发现了很多非常相似的问题,但对我的问题没有有用的答案:
我有一个表单,其中控件通过 TableAdapter/manager 绑定到 SQL 数据源。一些值链接到 Combobox 类型的 Lookuptables。当我第一次填充基础数据集时,一切都正确显示。我可以从 Combobox(字段 id 和 NamedItem)中选择项目,其中“id”作为数据成员绑定到基本数据集表,“NamedItem”是 Combobox 的 DisplayMember。
更改值或更新时没有问题,但是...
一旦我必须重新填充 Combobox 底层数据源(例如,如果添加了条目),则 Combobox 的选定索引设置为 0 - 表示列表中的第一项。
当然,我可以记住 selectedindex 并在之后恢复它。对于一个 Combobox,没问题,但对于数十个 ...
有没有其他方法可以在重新填充组合框后保留最后一个选中项?
【问题讨论】:
在填充组合框之前获取所选项目。然后填充comboxbox并将选中的项设置回原来的;选定的项目。 不,没有。想想看。如果您正在重新填充 DataTable,那么之前选择的项目不再存在,那么它怎么可能仍然被选择?如果您希望选择相同的项目,则该项目必须仍然存在,因此不要首先将其删除。如果有新项目要添加,只需添加它们,而不是扔掉已有的。 如果所有 ComboBox 控件都绑定到同一个数据源,则更改Current
,您的数据源指向的数据行。所有绑定的控件都将反映新的位置。
@jdweng 是的,这就是我现在正在做的事情。同时我也在思考,这将是唯一的方法。
@jmcilhinney:不,这些项目仍然存在,只是可以添加一个。插入直接在底层 SQL DB 中进行。这就是为什么我必须“更新”组合框。重点是,我没有将 DataTableManagers 用于查找表(因为在这种情况下,生成了大量代码)。这就是为什么我在 thd DB 中添加项目然后重新填充 Combobox 的原因。无论如何,我认为问题已经解决了。谢谢!
【参考方案1】:
如果项目不会从您的组合列表中删除,将表适配器的 Clearbeforfill 属性设置为 False 可以防止这种情况发生。
【讨论】:
Combobox 未绑定到表适配器,因此,这无济于事。以上是关于绑定组合框在(重新)填充数据源时更改 SelectedItem的主要内容,如果未能解决你的问题,请参考以下文章
在 DataTable 更改 WPF 后更新绑定到 DataTable 的 DataGrid
RowDetailsTemplate 中的组合框在选定列之前更新所有内容