把数据传回连接的数据库
.Net 数据模型意味着使用 DbDataAdapter 和 DataTable 对象绑定到数据库的控件不会立即传回所作的更改。 而是在 DataTable 中累积所作的更改,必须人工调用特定的方法来更新数据库。 XtraGrid 的行为与此类似: 编辑数据时所作的更改 (添加、删除或修改记录) 被保存在相应的 DataTable 中。 要把这些修改传回数据库,则应该调用数据适配器的 System.Data.Common.DbDataAdapter.Update 方法。
在调用此方法之前,要确保网格控件已经保存了对当前获得焦点的行所作的全部更改 (最终用户可能会输入新数据,但是忘了更新该行)。 要达到此目的, 则需要调用 BaseView.PostEditor 和 ColumnView.UpdateCurrentRow 方法。
下列代码列出了 UpdateDatasource 方法,此方法把存储在自定义 Suppliers 和 Products DataTable 中的更改传回到数据库。 假设数据适配器 (oleDbDataAdapter1 和 oleDbDataAdapter2) 包含了适当的 Update-SQL 语句来修改数据库中相应的表。 在默认情况下,这些语句是通过适配器的“向导”创建的。dataSet11 对象表示一个 DataSet 实例,并且它提供了对表的访问。
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid; using DevExpress.XtraGrid.Views.Base; using System.Data.Common; //... public void UpdateDatasource(GridControl grid) { //Save the latest changes to the bound DataTable ColumnView View = (ColumnView)grid.FocusedView; if (!(view.PostEditor() && View.UpdateCurrentRow())) return; //Update the database's Suppliers table to which oleDBDataAdapter1 is connected DoUpdate(oleDbDataAdapter1, dataSet11.Tables["Suppliers"]); //Update the database's Products table to which the oleDbDataAdapter2 is connected DoUpdate(oleDbDataAdapter2, dataSet11.Tables["Products"]); } public void DoUpdate(DbDataAdapter dataAdapter, System.Data.DataTable dataTable) { try { dataAdapter.Update(dataTable); } catch(Exception ex) { MessageBox.Show(ex.Message); } } |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid Imports DevExpress.XtraGrid.Views.Base Imports System.Data.Common '... Public Sub UpdateDatasource(ByVal grid As GridControl) 'Save the latest changes to the bound DataTable Dim View As ColumnView = grid.FocusedView If Not (view.PostEditor() And View.UpdateCurrentRow()) Then Return 'Update the database's Suppliers table to which oleDBDataAdapter1 is connected DoUpdateTable(oleDbDataAdapter1, dataSet11.Tables("Suppliers")) 'Update the database's Products table to which the oleDbDataAdapter2 is connected DoUpdateTable(oleDbDataAdapter2, dataSet11.Tables("Products")) End Sub Public Sub DoUpdateTable(ByVal dataAdapter As DbDataAdapter, _ ByVal dataTable As System.Data.DataTable) Try dataAdapter.Update(dataTable) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub |