读书人

[实例]DataGridView为什么不能实时显示

发布时间: 2012-06-01 16:46:36 作者: rapoo

[实例求助]DataGridView为什么不能实时显示数据库的更改?
我写了一个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.OleDbPublic 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 FunctionEnd Class



这是窗体Form1的全部代码,窗体上有一个 DataGridView 控件,用以显示数据库的内容,并且在程序启动的时候就把数据加载进去。

VB.NET code
Imports dbFunctionPublic 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 SubEnd Class


[解决办法]
估计是你操作没完成。
VB.NET code
Catch ex As Exception    Conn.Close()End Try 

读书人网 >VB Dotnet

热点推荐