我们定期使用Linq-To-Sql设置简单的winform。我最近发现,当ComboBox控件用作DropDownList时,它只在单击时更新底层数据绑定。因此,如果你在控件中制表,点击第一个字母选择你的条目,然后制表。底层数据绑定永远不会获得新值。Linq将绑定属性设置为ComboBox控件的文本值作为默认值。
对此的修复是更改linq绑定值(感谢评论者RedDog指出这一点)。
所以我的问题是:当从Linq拖动到Sql数据源时,如何设置Visual Studio使ComboBox自动将bindingsource设置为SelectedItem,而不是Text?当然可以节省工作,但也可以防止漏洞进入客户。
因此,如上所述,我相信您已经通过绑定到SelectedItem
并确保DataSourceUpdateMode
设置为OnPropertyChanged来解决此问题。
然而,通过重新措辞的问题,你会发现你无法改变VS的行为。你必须选择绑定到什么。有一个DefaultPropertyAttribute
,至少有一些设计师会听,但我不知道它是否适用于绑定。
我要补充的是,在我们的应用程序中,我们使用助手类在代码隐藏中手动添加所有绑定,而不是通过设计器。这给我们带来了许多好处,包括对所有约束控制的常见行为"修复"。它还允许我们使用LINQ表达式来解析属性名,并确保绑定始终指向数据源上的有效字段名——如果通过设计器设置绑定,然后删除架构中的字段,那么直到运行时才知道问题。
在组合框的情况下,我们的助手类有以下解决方法:
- 始终将
DataSourceUpdateMode
设置为OnPropertyChanged
- 如果绑定到SelectedItem或SelectedValue:
- 然后添加绑定
Parse
事件处理程序,以在SelectedIndex
为-1时将绑定值重置为绑定类型的默认值 - 当添加绑定后更改组合框的数据源时,请重置组合框的
SelectedIndex
(注意,由于某种原因,绑定到SelectedValue
时必须做更多特殊的事情)
- 然后添加绑定