2013-10-29 50 views
0

我有一個叫做Tel的對象,它被綁定到三個控件,如下所示。將對象設置爲新實例時單向綁定不起作用

this.txtTelName.DataBindings.Add("Text", tel, "T_Name", false, DataSourceUpdateMode.OnPropertyChanged); 
    this.chkActive.DataBindings.Add("Checked", tel, "T_Active", true, DataSourceUpdateMode.OnPropertyChanged); 
    this.txtNotes.DataBindings.Add("Text", tel, "T_Notes", true, DataSourceUpdateMode.OnPropertyChanged); 

這提示對象已成功控制到控件的所有值。

我需要實現一個下一個按鈕,它允許用戶通過保存tel對象保存控件上的值,然後用新實例創建tel對象並清除所有控件。所以用戶可以添加一條新記錄。

這是下一個按鈕代碼:

private void btnNext_Click(object sender, EventArgs e) 
    { 
    BllTel.Save(tel); //Saves the Tel entity 

    this.tel = new Model.DatabaseModels.Tel(); 
    tel.T_Active = BusinessLogic.Enums.StatusCodes.Active; 

    txtTelName.Text = ""; 
    txtNotes.Text = ""; 
    } 

直到這裏一切正常,但用戶進入第二次添加之後,電話對象不綁定他們在控制值寫入,將T_NameT_Notes作爲空值。

說明:我注意到,只要btnNext_Click方法代碼塊結束(在dubuggin上),它會遍歷數據庫中的所有實體(我看到它,當通過調試時,它通過所有定義在EDMX設計師,我可以看到它提取了表中所有可用的值)。

回答

1

它當然這樣工作。當您更改tel的實例時,它不再受限於其他控件。所以,你應該定義約束他們和之間數據的一些方法重新調用這個方法:

public void BindData(object tel){ 
    if(txtTelName.DataBindings["Text"] != null) 
     txtTelName.DataBindings.Remove(txtTelName.DataBindings["Text"]); 
    txtTelName.Add("Text", tel, "T_Name", false, DataSourceUpdateMode.OnPropertyChanged); 
    if(chkActive.DataBindings["Checked"] != null) 
     chkActive.DataBindings.Remove(chkActive.DataBindings["Checked"]);  
    chkActive.DataBindings.Add("Checked", tel, "T_Active", true, DataSourceUpdateMode.OnPropertyChanged);  
    if(txtNotes.DataBindings["Text"] != null) 
    txtNotes.DataBindings.Remove(txtNotes.DataBindings["Text"]);  
    txtNotes.DataBindings.Add("Text", tel, "T_Notes", true, DataSourceUpdateMode.OnPropertyChanged); 
} 
//then use it like this: 
tel = new Model.DatabaseModels.Tel(); 
tel.T_Active = BusinessLogic.Enums.StatusCodes.Active; 
BindData(tel); 
+0

同樣的結果,在控制不斷即使我創建對象的新實例綁定。也許我的問題還不夠清楚:(。 –

+0

它看起來綁定被設置爲一個特定的對象實例。我改變了一點你的代碼,一切工作完美,謝謝 綁定需要清除和重新創建: if (txtTelName.DataBindings [「Text」]!= null) this.txtTelName.DataBindings.Clear(); this.txtTelName.DataBindings.Add(「Text」,telData,「T_Name」,false,DataSourceUpdateMode.OnPropertyChanged ); } –

+1

@ Djavier89不使用'DataBindings.Clear()',它將刪除所有其他綁定,如果你有,只需使用'DataBindings.Remove',如果你不知道如何,請參閱我的更新。 –

相關問題