我有一个DatagGridView
,其中有一个来自Access数据库的DataSet
。我删除,更新或插入数据时遇到问题。
这是我的更新方法的一个例子。
Private Sub btnactualizar_Click(sender As Object, e As EventArgs) Handles btnactualizar.Click
novacios()
Try
con = New OleDb.OleDbConnection(ruta)
con.Open()
Dim actualiza As String = "UPDATE Usuarios SET nombre_real=@a1, correo = @a2, pass = @a3, activo = @a4 WHERE Correo = @a5"
sentencia = New OleDb.OleDbCommand(actualiza)
sentencia.Connection = con
sentencia.Parameters.AddWithValue("@a1", txtusuarios.Text)
sentencia.Parameters.AddWithValue("@a2", txtmail.Text)
sentencia.Parameters.AddWithValue("@a3", txtpass.Text)
sentencia.Parameters.AddWithValue("@a4", txtactivo.Text)
sentencia.Parameters.AddWithValue("@a5", txtusuarios.Text)
sentencia.ExecuteReader()
con.Close()
MessageBox.Show("Actualización realzada con éxito", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
Me.UsuariosTableAdapter.Fill(Me.Bd_proyectoNDataSet.Usuarios)
limpiatextos()
Catch ex As Exception
ex.Message.ToString()
End Try
End Sub
正如我们在消息框之后看到的那样,应该使用fill方法更新列表。但数据网格仍然是相同的。
这里有一些照片可以理解我在说什么。我将不胜感激。
更新数据之前
更新数据后。什么也没发生
答案 0 :(得分:1)
你正在倒退。不要对数据库进行更改,然后尝试从那里更新网格。首先更新本地数据,然后将该更改保存到数据库中。
您的网格绑定到BindingSource
,并且绑定到您键入的DataTable
中的DataSet
。那是你应该做出改变的地方。您可能应该将TextBoxes
绑定到相同的数据,在这种情况下,对数据的修改会自动发生。如果没有,那么您应该将TextBoxes
中的数据复制回您正在编辑的键入的DataRow
。该网格将自动反映该变化。然后,您可以在表适配器上调用Update
,将这些更改从DataTable
保存回数据库。
简而言之,不要直接对数据库进行更改,然后尝试将这些更改从数据库中提取到本地数据中。首先对本地数据进行更改,然后将这些更改保存到数据库中。