Linq To Sql组合框(DropDownList)正在设置默认绑定



我们定期使用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时必须做更多特殊的事情)

最新更新