2012-03-06 47 views
1

我有一個winform應用程序,我添加數據綁定到使用代碼的幾個控件。vb.net使數據綁定只讀

Dim tblWrapper As ObliqueQCAndSpliceTool.TableWrapper = New ObliqueQCAndSpliceTool.TableWrapper(tbl, idField.Name) 
tblWrapper.UseCVDomains = True 

bindSource = New BindingSource 
bindSource.DataSource = tblWrapper 
bindMgr = BindingContext(bindSource) 

bindSource.SuspendBinding() 

Dim idBinding As Binding = New Binding("Text", bindSource, idField.Name) 
txtPointID.DataBindings.Add(idBinding) 

然後,我有其他代碼,可能會自動更改這些控件中的值,因爲用戶移動列表中的記錄。我有一個要求添加一個簡單的按鈕,將禁用/重新啓用這些控件的編輯。換句話說,啓用時,用戶或程序可以編輯控件,新值將保存在源數據集中。禁用時,控件仍應顯示源數據集中的值,但用戶或程序應能夠更改這些值。

我已經研究了BindingList(tablewrapper)和BindingSource創建數據綁定但沒有運氣的對象的AllowEdit屬性。

是否有辦法將所有數據綁定更改爲只讀而不更改每個控件或重置所有綁定?

UPDATE:

我試圖通過@LarsTech提供的解決方案,但由於周圍的綁定是如何設置一些範圍的問題,我無法修改更新模式,而無需重新創建所有綁定。我決定簡單地禁用以編程方式更改控件中的值的所有代碼,並在按鈕設置爲禁用時禁用所有控件。

+0

修改視圖,而不是數據源。您可以使視圖只讀,並且可以在關聯的.cs文件中的on_click偵聽器中更改該屬性。 – evanmcdonnal 2012-03-06 22:26:56

+0

不幸的是,該數據集不在傳統數據庫中,因爲它是地理信息系統中的空間數據集。在這種情況下,我不確定我是否有看法。 – Brian 2012-03-06 22:30:57

回答

0

嘗試指定DataSourceUpdateMode

Dim idBinding As New Binding("Text", bindSource, idField.Name, _ 
          False, DataSourceUpdateMode.Never) 

DataSourceUpdateMode Enumeration

從不:
數據源從不更新和值輸入到控制不解析,驗證或再格式化。

您可以直接更改此:

idBinding.DataSourceUpdateMode = DataSourceUpdateMode.Never 

idBinding.DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged 
+0

我可以這樣做到一個綁定源,它將應用於表單上的所有控件?或者我必須遍歷所有綁定的控件? – Brian 2012-03-06 23:27:06

+0

@布萊恩我覺得你幾乎不得不。我只是沒有看到如何從DataSource本身做到這一點。 – LarsTech 2012-03-07 00:09:56

+0

我無法做你的建議。我更新了我的帖子,提供了更多信息。謝謝你的幫助。 – Brian 2012-03-07 14:42:58