我目前正在VB.NET中创建一个绑定到访问数据库的WinForm。
基本上我所拥有的是两种形式:一种是用于搜索数据库的搜索表单,另一种是详细信息表单。您在searchForm上运行搜索,它返回主键列表和一些其他标识值。然后双击要查看的条目,并加载详细信息表单。
“详细信息”表单包含一组数据绑定控件,用于显示数据:主要是文本框和复选框。我设置它的方式是我使用UI来构建表单,然后将每个控件的DataBindings属性设置为“TblPropertiesBindingSource - ”,其中值name是表中的值之一(例如PropertyID或HasWoodFloor)。
然后,当您双击searchform中的条目时,我通过从所选行解析主键(PropertyID)然后将其存储到详细信息表单来处理事件:
注意:详细信息是打开以显示信息的详细信息表单
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),但似乎并没有这样做。
答案 0 :(得分: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接受更改。