2017-07-25 46 views
0

我搜索了很多,但我沒有找到合適的解決方案。驗證綁定,取決於點擊哪個按鈕

我有一個TextBox,DataGridView,s和BindingSource

當我點擊我的Button「改變」我設置綁定和數據從DataGridView加載到TextBox,它的工作原理:

textBox.DataBindings.Add("text", bindingSource, "Name", true, DataSourceUpdateMode.OnPropertyChanged); 

現在當我點擊Button「取消」將被清除的結合

textBox.DataBindings.Clear(); 

但是數據仍然轉移到DataGridView。我想這是因爲OnPropertyChanged。當我將其更改爲OnValidation時,我知道只有在驗證後纔會保存它。

但我該如何驗證它或拒絕驗證?我有2 Button s,根據是否點擊'保存'按鈕或'取消'按鈕,它應該被轉移到DataGridView或不。

而且還與事件

textBox.Validating += textBox_Validating; 

我沒有得到它運行,因爲這個函數被調用之前,我可以點擊一個按鈕。

我該如何做到這一點?

回答

2

您可以創建與DataSourceUpdateMode.Never的綁定並將其存儲在表單級變量(字段)中。然後,您可以使用WriteValue方法應用更改(分別爲ReadValue以恢復更改)。

事情是這樣的:

形式:

Binding nameBinding; 

更改按鈕點擊:

nameBinding = textBox.DataBindings.Add("Text", bindingSource, "Name", true, DataSourceUpdateMode.Never); 

取消按鈕點擊:

nameBinding.ReadValue(); 
textBox.DataBindings.Clear(); 
nameBinding = null; 

保存按鈕點擊:

nameBinding.WriteValue(); 
textBox.DataBindings.Clear(); 
nameBinding = null; 
+0

謝謝,這偉大工程:)我現在的名單使用,因爲我有更多的控制,並用foreach我讀或寫的所有值。 – Beetee

+0

嗨伊凡:現在我用'BeginEdit','CancelEdit'和'EndEdit'找到了接口'IEditableObject'。這與「ReadValue」和「WriteValue」類似嗎? – Beetee

+0

Hi @Beetee,不完全。首先,它需要你的對象來實現這個接口。而且'BeginEdit'的實現應該以某種方式將所有的屬性值存儲在某個地方,以便在調用CancelEdit時能夠恢復它們。雖然上述技術沒有這樣的要求,因爲它將新值保存在控件中,並且僅在特定請求時才更新數據源。 –