【发布时间】: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 的原因。无论如何,我认为问题已经解决了。谢谢!
标签: c# vb.net winforms data-binding combobox