2009-09-09 117 views
0

如何防止bindingSource當前項目更改? (沒有與取消的說法沒有改變事件......)WinForms,BindingSource,防止CurrentItem變化

這是情景:

  • 我有一個DataGridView,和相同的表格上文本框。
  • 我使用文本框來改變值的數據源(與標準數據綁定)
  • 綁定手動寫入(保存後按鈕被點擊)

  • 當用戶選擇使用的DataGridView,BindingSource的另一行。當前propery被改變,並且文本框用選定行中的值更新。用戶輸入的更改將丟失。

有什麼辦法可以防止這個問題嗎?

我可以防止bindingSource.Current屬性更改嗎?

有沒有更好的選擇來防止這種行爲?

(禁用的dataGridView是unfortinutelly不是一個選項)

回答

0

這聽起來像你不想不改變bindingSource.Current,而是你想你更改當前行之前保存的文本框的內容?如果您已將集合綁定到bindingSource,那麼請不要在文本框中引用該集合中當前元素的屬性?

我真的不知道你想做什麼,但在黑暗中拍攝可能是結合同一DataSource兩個不同BindingSource的對象,這樣的事情:

gridBindingSource.DataSource = theDataSource; 
textBoxBindingSource.DataSource = theDataSource; 
myDataGrid.DataSource = gridBindingSource; 
firstNameTextBox.Bindings.Add (new Binding ("Text", textBoxBindingSource, "FirstName")); 

但這將是不可思議的,因爲如果theDataSource適合網格控件,那麼它的東西,有一個FirstName屬性集合。也許如果你對你的問題更具體。


埃塔:如果你想在文本框的內容保存到當前行,調用容器上ValidateChildren()bindingSource.Current屬性更改。

+0

你的回答肯定給了我一個解決我的問題的新視角。這可以很容易地解決我的問題。 – Emir 2009-09-09 16:30:34

+0

這是我將實施的解決方案。它比簡單地禁用網格更復雜,但它給了我更多的功能(用戶可以在添加新記錄的同時瀏覽網格,例如用於參考目的) – Emir 2009-09-10 02:40:53

0

我有兩個網格和文本框同一表格上有些類似的框架。當用戶點擊編輯按鈕(或添加),我只是禁用GridView控件本身......

MyDataGrid.Enabled = FALSE;

繼續編輯..

在SAVE

然後,如果一切正常,

MyDataGrid.Enabled = TRUE;

+0

正在爲最終用戶禁用datagridview令人困惑嗎?你調整了禁用的網格外觀嗎? – Emir 2009-09-09 16:15:16

+0

+1。我也可能將BackColor設置爲Control或Butonface – Steve 2009-09-09 20:03:50

+0

最簡單的答案就是啓用/禁用網格。如果你想變得更漂亮,並且可以改變顏色,字體或其他東西。我甚至在其他主題中看到人們將如何創建一個可以具有柔和灰色陰影或其他視覺指示符的「形狀」對象,並根據其位置/座標直接覆蓋整個網格。然後顯示/隱藏該控件,同時分別啓用/禁用網格,爲用戶提供一個視覺指示器,表明它已被禁用。 – DRapp 2009-09-09 20:31:00