更改数据源后,刷新WinForms控件绑定到BindingSource(绑定到对象)

时间:2014-04-25 22:41:41

标签: c# winforms data-binding

我有一个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);

还是有更好的?

2 个答案:

答案 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);
}