2008-11-03 33 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接受更改。