我的问题是,当我在数据网格中编辑单元格时,数据库没有更新。 我使用的代码如下。
Public Class Form9
Inherits System.Windows.Forms.Form
Dim sql As String = "SELECT * FROM User_Account WHERE IsAdmin=False"
Dim conn As New OleDb.OleDbConnection
Dim sqlCom As New System.Data.OleDb.OleDbCommand(sql, conn)
Dim da As New OleDb.OleDbDataAdapter(sqlCom)
Dim dt As New DataTable
Private Sub Form9_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Load
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & _
folderpath & "\TKIC\TKIC_Data_Storage.accdb'" & _
";Persist Security Info=True"
conn.Open()
da.Fill(dt)
DataGridView1.DataSource = dt
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs)
DataGridView1.Update()
dt.AcceptChanges()
End Sub
End Class
答案 0 :(得分:3)
您必须更新基础DataTable
。 DataGridView.Update
导致控件重绘其客户区域内的无效区域(基本上重绘)。 dt.AcceptChanges()
仅提交DataTable中的更改而不是数据库中的更改。必须使用适配器和适当的命令文本显式更新数据库。 OleDbCommandBuilder
有助于形成适当的命令文本。
使用OleDbDataAdapter
更新数据库。
OleDbCommandBuilder cb = new OleDbCommandBuilder(adapter);
cb.QuotePrefix = "[";
cb.QuoteSuffix = "]";
adapter.Update(datatable);