【问题标题】:Refreshing WinForms Controls Bound to BindingSource (Bound to Object) After Data Source is Changed更改数据源后刷新绑定到BindingSource(绑定到对象)的WinForms控件
【发布时间】:2014-06-11 19:50:26
【问题描述】:

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

用户点击按钮进入交易。我将当前正在编辑的成员的成员对象传递给对话框。用户为成员输入交易,然后单击保存。 Save 按钮调用一个名为CalculateOwing 的方法。该方法重新计算会员的会费、启动、其他和欠款总额,保存会员对象,然后将保存的数据提交到底层数据源。

交易表单关闭,用户返回会员表单。现在我如何让文本框更新,以便显示新的余额。我已经尝试过 MemberBS.ResetBindings(false) 但这不起作用。

是从数据源重新加载对象的唯一解决方案

MemberBS.DataSource = Repository.GetMember(socSecNo);

还是有更好的?

【问题讨论】:

    标签: c# winforms data-binding


    【解决方案1】:

    要使您的控件能够自动反映绑定源的动态更改,您的类需要提供适当的属性更改通知。 Example 展示了如何创建一个实现 INotifyPropertyChanged 的类。有关概念,请参阅this

    实现后,该接口会将业务对象的属性更改与绑定控件进行通信。

    【讨论】:

      【解决方案2】:

      这是一个相当老的线程......就个人而言,我使用 bindingsource.ResetBindings(false) 和 Invoke 调用来刷新我的控件。

      例如:

      if (InvokeRequired)
      {
           this.Invoke(new Action(()=>this.bindingSource.ResetBindings(false)));
      }
      else
      {
           this.bindingSource.ResetBindings(false);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-10
        • 1970-01-01
        • 1970-01-01
        • 2019-12-17
        • 2010-10-24
        • 2018-07-16
        • 2017-08-30
        相关资源
        最近更新 更多