Winforms 数据绑定文本框更新不会持久保存到数据库
我有一个winforms应用程序,其中包含一组用于实体的文本框,我们将该实体称为Winforms 数据绑定文本框更新不会持久保存到数据库,winforms,entity-framework,bindingsource,fody-propertychanged,Winforms,Entity Framework,Bindingsource,Fody Propertychanged,我有一个winforms应用程序,其中包含一组用于实体的文本框,我们将该实体称为Product 我的一个文本框是隐藏的,因为它持有另一个数据库对象的外键业务单元。我使用在父表中查找值的组合框填充隐藏的文本框。当选择更改时,隐藏文本框中的值也会更改 private void businessUnitComboBox_SelectionChangeCommitted(object sender, EventArgs e) { this.businessUnitIdTextBo
Product
我的一个文本框是隐藏的,因为它持有另一个数据库对象的外键业务单元
。我使用在父表中查找值的组合框填充隐藏的文本框。当选择更改时,隐藏文本框中的值也会更改
private void businessUnitComboBox_SelectionChangeCommitted(object sender, EventArgs e)
{
this.businessUnitIdTextBox.Text = this.businessUnitComboBox.SelectedValue.ToString();
this.businessUnitComboBox.Focus();
}
问题是在我的上下文中调用SaveChanges后,隐藏文本框中的此更改不会持久化。奇怪的是,如果我更新任何一个产品
文本框,它们都可以保存
文本框是通过VisualStudio的GUI中的标准拖放添加到项目中的,并且在自动添加时创建了bindingsource
我的实体使用fody propertychanged实现INotifyPropertyChanged
我正在努力寻找这个问题。创建新记录可以很好地工作,但是更新一个外键值从来没有
这是因为它是一个导航属性,需要以不同的方式处理,还是有其他可能导致更改无法持久化?非常感谢您的帮助。可能是因为您的保存方法中缺少此.Validate()。 将此代码放入表单的保存方法中
this.Validate();
this.yourBindingSource.EndEdit();
yourDbContext.SaveChanges();
数据绑定的默认行为是OnValidation
要更改此行为,可以转到文本框属性,打开数据绑定部分,打开高级,将数据源更新模式更改为OnPropertyChanged
因此,在设计器生成的代码中进行数据绑定的代码如下所示:
this.nameTextBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.productBindingSource, "Category.Name", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
在这种情况下,您不需要使用此选项。保存更改前验证,您只需使用
this.yourBindingSource.EndEdit();
yourDbContext.SaveChanges();
我们可以查看您的产品模型类吗?我可以解决直接分配给外键对象而不是外键Id的问题。产品
类是POCO,包括fody INotifyPropertyChanged magic。但我确实使用演示者作为形式和上下文之间的中介。我现在将BusinessUnitBindingSource.Current
传递给演示者,并设置导航属性而不是Id。感谢您对DataSourceMode的建议和解释。我不熟悉这个框架,不知道这些配置。不幸的是,添加这些行并没有改变我的情况。我能够解决直接分配给外键对象而不是外键Id的问题。因此我使用Product.BusinessUnit=BusinessUnitBindingSource.Current
而不是Product.BusinessUnitId=(int)this.businessUnitIdTextBox.Text