我写了一个Windows小程序,使其可以对Access数据库作写入操作,并且Access数据库用DataGridView控件实时显示,以期望实现数据一经插入,DataGridView即可立即更新变化!
可是我发现当我在Access数据库中成功插入一行记录后,DataGridView并没有更新,但关闭了程序,再重新进入程序后,刚才插入的记录才可以显示出来。
如果不退出重新启动程序,而是连续插入多个记录的话,那么第一次插入操作是看不到DataGridView有任何更新的,只有插入第二行记录的时候,上一次插入的记录才可以显示出来。
以此类推,最后一次插入的记录始终都不会显示,还是需要重新启动应用程序才可正确显示,具体如下,请问为什么会这样的?
我应该怎样修改才可以让DataGridView实时显示数据库的更改?谢谢!
这是类库 dbFunction 的全部代码,我在UserPermission中设置了两个可读写的属性,分别为:Name和Password,用以暂存Form1传过来的用户名和密码,以供类库内部的Sub Add()使用。
- VB.NET code
'''此类库名称为 dbFunction '''需要在程序中使用 Imports dbFunction 语句引用 Imports System.Data.OleDb Public Class UserPermission Dim _name As String Dim _password As String Public Property Name() As String Get Return _name End Get Set(ByVal value As String) _name = value End Set End Property Public Property Password() As String Get Return _password End Get Set(ByVal value As String) _password = value End Set End Property Private Function GetConnection() As OleDbConnection Dim dbName As String Dim StrConnection As String Dim Conn As OleDbConnection dbName = My.Settings("dbName") StrConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbName Conn = New OleDbConnection(StrConnection) Return Conn End Function '在数据库中插入一行数据 Public Sub Add() Dim Conn As OleDbConnection = GetConnection() Try Conn.Open() Dim Sql As String = "INSERT INTO Users(name,password) VALUES (@name,@password)" Dim Cmd As OleDbCommand = New OleDbCommand(Sql, Conn) Dim P1 As OleDbParameter = New OleDbParameter("@name", Me.Name) Dim P2 As OleDbParameter = New OleDbParameter("@password", Me.Password) Cmd.Parameters.Add(P1) Cmd.Parameters.Add(P2) Cmd.ExecuteNonQuery() Catch ex As Exception Conn.Close() End Try End Sub '获取数据库中的全部数据 Public Function GetAll() As DataTable Dim Conn As OleDbConnection = GetConnection() Dim Sql As String = "SELECT * FROM Users" Dim myDataAdapter As OleDbDataAdapter = New OleDbDataAdapter(Sql, Conn) Dim Cmd As OleDbCommandBuilder = New OleDbCommandBuilder(myDataAdapter) Dim Dt As DataTable = New DataTable() myDataAdapter.Fill(Dt) Return Dt End Function End Class
这是窗体Form1的全部代码,窗体上有一个 DataGridView 控件,用以显示数据库的内容,并且在程序启动的时候就把数据加载进去。
- VB.NET code
Imports dbFunction Public Class Form1 Dim UserData As UserPermission Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect UserData = New UserPermission() DataGridView1.DataSource = UserData.GetAll() End Sub '保存 Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click UserData.Name = txtName.Text.Trim UserData.Password = txtPassword.Text.Trim UserData.Add() DataGridView1.DataSource = UserData.GetAll() End Sub End Class
------解决方案--------------------
估计是你操作没完成。
- VB.NET code
Catch ex As Exception Conn.Close() End Try