2014-04-25 105 views
0

我有一個winform綁定到名爲MemberBS綁定到一個名爲DomainModel.Member的自定義對象的綁定源的控件。成員對象綁定到名爲members的sql server數據庫中的表。刷新winform控件綁定綁定到綁定到對象的數據源更改後的對象

在窗體上的控件中我有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

要使控件自動反映綁定源的動態更改,您的類需要提供適當的屬性更改通知。 Example演示如何創建一個實現INotifyPropertyChanged的類。有關概念,請參閱this

實現時,接口將一個業務對象上的屬性更改傳遞給綁定控件。

0

這是相當古老的線程...就我個人而言,我用一個Invoke調用bindingsource.ResetBindings(false)來刷新我的控件。

例如:

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