DataGridView单元格值更改不会发生,直到我从按钮单击调用

时间:2013-04-14 02:58:30

标签: vb.net datagridview ms-access-2007

我已将Access数据库中的Product List检索到DataGridView中。这是代码:

Sub loadProductList()
    Try
        Using dbConn As New OleDb.OleDbConnection
            dbConn.ConnectionString = dbProvider & dbSource
            dbConn.Open()
            Dim thisSQL As String
            thisSQL = "SELECT productID, productName, productCostPrice From " & tblProduct & " WHERE productBrandID=" & CType(txtBrandName.Tag, Integer)
            Dim Dadapter As New OleDbDataAdapter(thisSQL, dbConn)
            Dim DSet As New DataSet
            Dadapter.Fill(DSet, tblProduct)
            With DataGridView1
                .Columns.Clear()
                .DataSource = DSet.Tables(tblProduct)
                With .Columns.Item(0)
                    .Width = 50
                    .HeaderText = "Code"
                    .Name = "Code"
                End With
                Dim txtColumn As New DataGridViewTextBoxColumn
                With txtColumn
                    .Width = 50
                    .HeaderText = "Qty"
                    .Name = "Qty"
                End With
                .Columns.Insert(1, txtColumn)
                With .Columns.Item(2)
                    .Width = 490
                    .HeaderText = "Description"
                End With
                With .Columns.Item(3)
                    .Width = 100
                    .HeaderText = "Price"
                    .Name = "Price"
                    .DefaultCellStyle.Format = "N"
                End With
                Dim txtaColumn As New DataGridViewTextBoxColumn
                .Columns.Insert(4, txtaColumn)
                With .Columns.Item(4)
                    .Name = "Amount"
                    .HeaderText = "Amount"
                    .Width = 120
                    .DefaultCellStyle.Format = "N"
                End With
            End With
        End Using
    Catch ex As Exception

    End Try
End Sub
Sub UpdatePurchaseItemList()
    Try
            Using dbConn As New OleDb.OleDbConnection
            dbConn.ConnectionString = dbProvider & dbSource
            dbConn.Open()
            Dim thisSQL As String
            thisSQL = "SELECT * FROM " & tblPurchaseItems & " WHERE PitemPID='" & txtRefID.Text & "'"
            Using dbDataCmd As New OleDbCommand(thisSQL, dbConn)
                Dim dbDataRead As OleDbDataReader
                dbDataRead = dbDataCmd.ExecuteReader()
                Do While dbDataRead.Read = True
                    For i As Integer = 0 To DataGridView1.Rows.Count - 1
                        With DataGridView1.Rows(i)
                            If .Cells("Code").Value = dbDataRead("PitemProductID") Then
                                .Cells("Qty").Value = dbDataRead("PitemProductQty")
                                .Cells("Price").Value = dbDataRead("PitemCost")
                                .Cells("Amount").Value = dbDataRead("PitemTotal")
                                Exit For
                            End If
                        End With
                    Next
                Loop
            End Using
        End Using
    Catch ex As Exception

    End Try
End Sub

在表单加载时我调用了sub:
loadProductList()
UpdatePurchaseItemList()'这不会更新任何东西

但是当我在按钮上调用此子按钮时,它甚至可以完美地工作。

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    UpdatePurchaseItemList() 'it shows the updates. 
End Sub

请告诉我为什么它不显示更新? 感谢

2 个答案:

答案 0 :(得分:0)

我现在无法测试,但在更新datagridview后尝试使用endsit():

                With DataGridView1.Rows(i)
                    If .Cells("Code").Value = dbDataRead("PitemProductID") Then
                        .Cells("Qty").Value = dbDataRead("PitemProductQty")
                        .Cells("Price").Value = dbDataRead("PitemCost")
                        .Cells("Amount").Value = dbDataRead("PitemTotal")
                        DataGridView1.EndEdit()
                        Exit For
                    End If
                End With

应该'提交并结束当前单元格的编辑操作。'根据MSDN Datagridview.EndEdit Method

答案 1 :(得分:0)

好的尝试这个技巧它会自动更新你的datagridview

上的数据
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    RefreshData()
End Sub


 Private Sub RefreshData()

    Dim da As OleDbDataAdapter
    Dim ds As New DataSet


    If Not cnn.State = ConnectionState.Open Then
        'open connection
        cnn.Open()
    End If

    da = New OleDb.OleDbDataAdapter("Select * FROM tblPurchaseItems", cnn)


    'Dim dt As New DataSet
    'fill data to datatable
    da.Fill(ds)

    'offer data in data table into datagridview
    Me.DataGridView1.DataSource = ds.Tables(0)
    Me.DataGridView1.Refresh()
    'close connection
    cnn.Close()

End Sub

然后在你的,添加,编辑,删除子语句结束之前复制并粘贴RefreshData()