简体   繁体   中英

DataGridView Cell Value Change Not Happening untill i call from button click

I have retrieved Product List from access database into a DataGridView. here is code:

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

on form load i am calling both sub:
loadProductList()
UpdatePurchaseItemList() ' this does not update any thing

but when i call this sub on button click even it works perfectly.

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

please tell me why it does not show updates? Thanks

I'm not able to test right now, but try endedit() after you update your datagridview:

                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

That should 'Commits and ends the edit operation on the current cell.' as per MSDN Datagridview.EndEdit Method

ok try this trick it will automatically update the data on you're 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

and then copy and paste RefreshData() before the end of your, add,edit,delete sub statement

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM