我有一个winform,它具有绑定到名为MemberBS的绑定源的控件,该绑定源绑定到名为DomainModel.Member的自定义对象。成员对象绑定到名为members的SQL Server数据库中的表。
在表单上的控件中,我有4个文本框,它们的绑定如下。
DuesOwingCE.DataBindings.Add("Text", MemberBS, "DuesOwing", true, DataSourceUpdateMode.OnPropertyChanged);
InitOwingCE.DataBindings.Add("Text", MemberBS, "InitOwing", true, DataSourceUpdateMode.OnPropertyChanged);
OtherOwingCE.DataBindings.Add("Text", MemberBS, "OtherOwing", true, DataSourceUpdateMode.OnPropertyChanged);
AmountOwingCE.DataBindings.Add("Text", MemberBS, "AmountOwing", true, DataSourceUpdateMode.OnPropertyChanged);
用户点击按钮输入交易。我将当前正在编辑的成员的成员对象传递给对话框。用户输入该成员的事务,然后单击“保存”。 “保存”按钮调用名为CalculateOwing的方法。该方法重新计算成员的会费,启动费,其他费用和总费用,保存成员对象,然后将保存提交给基础数据源。
交易表单关闭,用户返回成员表单。现在我如何让文本框更新,以便显示新的余额。我尝试过MemberBS.ResetBindings(false),但这不起作用。
是从数据源重新加载对象的唯一解决方案
MemberBS.DataSource = Repository.GetMember(socSecNo);
还是有更好的?
答案 0 :(得分:0)
要使控件能够自动反映绑定源的动态更改,您的类需要提供适当的属性更改通知。 Example显示了如何创建实现 INotifyPropertyChanged 的类。有关概念,请参阅this。
实现后,接口与绑定控件进行通信,属性在业务对象上发生更改。
答案 1 :(得分:0)
这是一个非常老的线程...就个人而言,我使用bindingsource.ResetBindings(false)和Invoke调用来刷新我的控件。
例如:
if (InvokeRequired)
{
this.Invoke(new Action(()=>this.bindingSource.ResetBindings(false)));
}
else
{
this.bindingSource.ResetBindings(false);
}