2008-11-03 60 views
1

我目前在綁定到訪問數據庫的VB.NET中創建一個WinForm。從DataBound控件更新數據庫

基本上我有兩種形式:一種是用於搜索數據庫的搜索表單,另一種是詳細信息表單。您在searchForm上運行搜索,並返回主鍵和其他一些標識值的列表。然後雙擊要查看的條目,並加載詳細信息表單。

「詳細信息」表單具有一組數據綁定控件以顯示數據:主要是文本框和複選框。我設置它的方式是我使用UI來構建表單,然後將每個控件的DataBindings屬性設置爲「TblPropertiesBindingSource - 」,其中值名稱是表中的值之一(例如PropertyID或HasWoodFloor)。

然後,當你雙擊在searchform的條目,我通過分析主鍵(物業ID)從所選行,然後這個存儲的細節處理事件形成:

注:細節決定細節形成被打開,顯示信息

Private Sub propView_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles propView.CellDoubleClick 
     Dim detail As frmPropertiesDetail = New frmPropertiesDetail 
     detail.id = propView.Rows(e.RowIndex).Cells(0).Value 
     detail.Show() 
    End Sub 

然後,在加載的細節構成,其設置是在BindSource過濾器這樣:

TblPropertiesBindingSource.Filter() = "PropertyID=" & id 

目前爲止效果很好。詳細信息表單上的所有控件都將顯示正確的信息。問題是更新更改。

場景: 如果我有用戶加載say,property 10001的詳細信息,它將在名爲descriptionBox的文本框中顯示一個描述,該描述與數據庫中該條目的描述值的值相同。然後,我希望用戶能夠更改文本框的文本(他們當前可以執行的操作),然後單擊保存按鈕(saveBut),並讓表單將控件中的所有值更新到數據庫。

理論上,它應該這樣做,因爲控件是DataBound,因此我可以避免編寫代碼來告訴數據庫行中的每個條目採用對齊控件的值。

我試着調用PropertiesTableAdapter.Update(PropertiesBindingSource.DataSource),但似乎並沒有這樣做。

回答

0

好吧,我能夠弄清楚這個選擇是否分開我從朋友那裏掠奪的一些代碼。

一切順利,問題的更新

當我保存數據,我打電話只是:

Me.TblProptertiesTableAdapter.Update(Me.TblPropertiesBindingSource.DataSource) 

正確的代碼,而無需改變任何東西是:

Me.Validate() 
Me.TblPropertiesBindingSource.EndEdit() 
Me.TblPropertiesTableAdapter.Update(Me.RentalPropertiesDataSet.tblProperties) 
Me.RentalPropertiesDataSet.AcceptChanges() 

其中RentalPropertiesDataSet是TblProperties來自的數據庫。爲了這個工作,請確保TblPropertiesBindingSource.DataSource是RentalPropertiesDataSet.Properties這是VS08在創建BindingSource時爲我自動設置的。

基本上,我需要告訴BindingSource停止允許編輯字段。然後我們將更改保存到數據庫,最後我們告訴DataBase接受更改。