我目前正在VB.NET中创建一个绑定到访问数据库的WinForm。
基本上,我有两个表单:一个是用于搜索数据库的搜索表单,另一个是详细信息表单。您在searchForm上运行搜索,它会返回主键列表和其他一些标识值。然后双击要查看的条目,它就会加载详细信息表单
Details表单有一组用于显示数据的数据绑定控件:主要是文本框和复选框。我设置它的方式是使用UI构建表单,然后将每个控件的DataBindings属性设置为"TblPropertiesBindingSource-",其中值名称是表中的值之一(如PropertyID或HasWoodFloor)。
然后,当您双击搜索表单中的一个条目时,我通过解析所选行中的主键(PropertyID)来处理该事件,然后将其存储到详细信息表单中:
注意:Detail是打开以显示信息的详细信息表单
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
到目前为止效果很好。详细信息表单上的所有控件都将显示正确的信息。问题是更新更改。
场景:如果我让用户加载例如属性10001的详细信息,它将在名为descriptionBox的textBox中显示一个描述,该描述与数据库中该条目的描述值的值相同。我希望用户能够更改文本框的文本(他们目前可以这样做),然后单击保存按钮(saveBut),并让表单将控件中的所有值更新到数据库中。
从理论上讲,它应该这样做,因为控件是DataBound,因此我可以避免编写代码,告诉数据库行中的每个条目取对齐控件的值。
我试过调用PropertiesTableAdapter.Update(PropertiesBindingSource.DataSource),但似乎没有用。
好吧,我从朋友那里偷来的一些代码中找到了这个。
一切都还好,问题是更新
当我保存数据时,我只打电话给:
Me.TblProptertiesTableAdapter.Update(Me.TblPropertiesBindingSource.DataSource)
在不改变任何其他内容的情况下,正确的代码是:
Me.Validate()
Me.TblPropertiesBindingSource.EndEdit()
Me.TblPropertiesTableAdapter.Update(Me.RentalPropertiesDataSet.tblProperties)
Me.RentalPropertiesDataSet.AcceptChanges()
其中RentalProperties DataSet是TblProperties的来源数据库。为了使其工作,请确保TblPropertiesBindingSource.DataSource是RentalPropertiesDataSet.Properties这是VS08在创建BindingSource时为我自动设置的。
基本上,我需要告诉BindingSource停止允许编辑字段。然后我们将更改保存到数据库中,最后我们告诉数据库接受更改。