2011-06-27 145 views
0

我有一個綁定到業務對象列表(每個對象只有一個可編輯字段)的簡單DataGridView。我需要用戶對該值進行的任何更改(在DataGridViewTextBoxColumn中)以更新綁定對象。也就是說,以與綁定普通文本框並使用「OnPropertyChanged」選項時可用的相同方式爲每個按鍵進行更新。當TextBox值被更改時立即更新DataGridView數據源

原因是我只需要在綁定對象的「IsDirty」屬性爲true時啓用表單上的「確定」按鈕。

對於複選框列和使用CurrentCellDirtyStateChanged事件並調用CommitEdit,似乎有很多關於各種網站的討論。我已經嘗試過這種方法,但是這樣做有第一個按鍵清除所有文本單元格的不幸副作用!

任何幫助非常感謝,謝謝。

+0

您確實需要更新數據源嗎?難道你不是簡單地使用CurrentCellDirtyStateChanged事件並啓用按鈕?當按鈕被點擊時,焦點丟失時數據源應該更新。 –

回答

0

這聽起來像你想要的是,只要用戶開始在任何單元格中鍵入,啓用按鈕?點擊按鈕之前,DataSource實際上是否需要更新?

如果不是那麼CurrentCellDirtyStateChanged應該正常工作 - 只是不要調用CommitEdit方法,而是將您的按鈕設置爲在那裏啓用。

當單元格失去焦點時,更改將應用​​於DataSource - 因此,單擊按鈕時,您將能夠處理正確的數據。


我想我可能已經找到了解決辦法 - 不是100%肯定,因爲我沒有你要連接的IsDirty變化,看到這一切工作的MVC控制器 - 我把一個破發點中一個屬性設置器在我的DataSource對象上,它會被下面的代碼觸發,而不是沒有它,所以我認爲這是有效的。

它只是爲DataErrorContext參數使用CurrentCellDirtyStateChanged和CurrentCellChange枚舉。

void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
{ 
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.CurrentCellChange); 
} 
+0

這是我想要的效果是的,但我有一個模型 - 視圖 - 控制器(MVC)體系結構,因此必須在對象中完成工作。該按鈕在對象髒的情況下啓用,而不是直接由表單上的代碼啓用。 – Darren

+0

我發現,當試圖獲得一個MV *架構(我使用MVP的winforms)數據綁定阻礙。 –

+0

@Darren - 也是對架構的一種思考,除非你要求一個非常嚴格的被動視圖,你不能從CurrentCellDirtyStateChanged事件發送一條消息到你的控制器,然後將必要的改變爲視圖 - 數據綁定不會'不一定需要進入它。 –

相關問題