2016-10-13 105 views
0

我有一个DatagGridView,它有一个来自Access数据库的DataSet。我删除,更新或插入数据时遇到问题。删除,更新或插入后DataGridView不会更新

这是我更新方法的一个例子。

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 [email protected], 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方法更新。但是datagrid仍然是一样的。

这里有一些图片来理解我在说什么。我会感谢任何帮助。

之前更新数据 Here's before update the data. See the datagrid

更新数据后。什么都没有发生 And here's after I updated the data. Nothing happened

+0

'sentencia.ExecuteNonQuery()' – LarsTech

回答

1

你正在做事情倒退。不要对数据库进行更改,然后尝试从那里更新网格。您先更新本地数据,然后将更改保存到数据库。

您的网格绑定到BindingSource,并且在您输入的DataSet中绑定到DataTable。这就是你应该做出改变的地方。这可能是因为您应该将您的TextBoxes绑定到相同的数据,在这种情况下,数据的修改会自动发生。如果不是,那么您应该将TextBoxes中的数据复制回您正在编辑的输入DataRow。该网格将自动反映这一变化。 YOu然后在您的表格适配器上调用Update将这些来自DataTable的更改保存回数据库。

总之,不要直接对数据库进行更改,然后尝试将这些更改从数据库中提取到本地数据中。首先对本地数据进行更改,然后将这些更改保存到数据库。

相关问题