添加新数据后如何刷新我的 datagridview

hPy*_*Pys 5 vb.net ms-access

我在寻找刷新 datagridview 的方法时遇到了很多麻烦。我尝试过 datagridview.refresh()、datagridview.Update()...但它不起作用...

这是我的代码

Imports System.Data
Imports System.Data.OleDb
Imports System.Data.Odbc
Imports System.Data.DataTable
Public Class Form1

Dim provider As String
Dim dataFile As String
Dim connString As String
Dim addstring As String
Dim cnn As OleDbConnection = New OleDbConnection
Dim ds As DataSet = New DataSet
Dim da As OleDbDataAdapter
Dim tables As DataTableCollection = ds.Tables
Dim cmd As New OleDb.OleDbCommand
Dim dr As System.Data.OleDb.OleDbDataReader


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    t_date.Text = Today
    provider = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="
    dataFile = "C:\Users\hp-2\Documents\Visual Studio 2012\Projects\Delta\Delta.mdb"

    connString = provider & dataFile
    cnn.ConnectionString = connString
    da = New OleDbDataAdapter("Select Customer_Name, Job, Amount from [Transaction] where Trans_date = Date()", cnn)
    da.Fill(ds, "Transaction")

    Dim view1 As New DataView(tables(0))
    Dim source1 As New BindingSource()
    source1.DataSource = view1
    showdata.DataSource = view1
    showdata.Refresh()
    cnn.Close()
End Sub
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个,但它也不起作用。

Private Sub showdat()
    If Not cnn.State = ConnectionState.Open Then
        cnn.Open()
    End If
    showdata.Refresh()
    cnn.Close()
End Sub
Run Code Online (Sandbox Code Playgroud)

...

Private Sub btmclose_Click(sender As Object, e As EventArgs) Handles btmclose.Click
    Me.Close()
End Sub

Private Sub C_job_SelectedIndexChanged(sender As Object, e As EventArgs) Handles C_job.SelectedIndexChanged
    Dim selected As String = C_job.SelectedItem.ToString()
    If selected = "Internet" Then
        t_amount.Text = "20"
        php.Visible = True
    ElseIf selected = "Games" Then
        t_amount.Text = "10"
        php.Visible = True
    ElseIf selected = "Print (short)" Then
        t_amount.Text = "1"
        php.Visible = True
    ElseIf selected = "Print (long)" Then
        t_amount.Text = "2"
        php.Visible = True
    ElseIf t_amount.Text = "" Then
        php.Visible = False
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

这是我的“添加”按钮...单击它后...数据已成功添加,但 datagridview 未刷新...

Private Sub btnadd_Click(sender As Object, e As EventArgs) Handles btnadd.Click

    provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    dataFile = "C:\Users\hp-2\Documents\Visual Studio 2012\Projects\Delta\Delta.mdb"

    connString = provider & dataFile
    cnn.ConnectionString = connString
    cnn.Open()

    cmd.Connection = cnn

    cmd.CommandText = "insert into [Transaction] (Customer_Name, Job, Trans_date, Amount ) " & _
        " values ('" & C_name.Text & "','" & C_job.Text & "','" & t_date.Text & "','" & t_amount.Text & "')"
    cmd.ExecuteNonQuery()

    showdat()

    cnn.Close()
End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

Set*_*ore 3

我认为问题在于您正在向数据库添加新条目,而不是数据网格表示的数据结构。您仅在加载事件中查询数据库中的数据,因此如果此后数据库发生更改,您将不会知道它。

要解决此问题,您需要在每次插入后重新查询数据库,或者在每次插入后将项目添加到除 Access 表之外的tables(0) 数据结构中。