专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VB Dotnet

[实例]DataGridView为什么不能实时显示数据库的更改

发布时间:2011-06-23 14:54:20 文章来源:www.iduyao.cn 采编人员:星星草
[实例求助]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.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
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: