如果在DataGridView1_CellValueChanged中使用,VB.NET将更改为未保存的datagridview

时间:2015-11-06 09:33:29

标签: vb.net datagridview save

我在VB.NET中使用datagridview

在button1_Click()上,我使用下面的代码将网格中的更改保存到DB。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As  System.EventArgs) Handles Button1.Click

    Dim cb As New OleDb.OleDbCommandBuilder(Dadapter)

    conList.Open()
    Dadapter.Update(DSet, "myShop")
    DSet.AcceptChanges()
    conList.Close()

End Sub

这项工作很精细。

但是我需要在编辑单元格时保存数据。将焦点设置为另一个单元格。 所以我用下面的代码。

Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged

    Dim nColumn As Integer
    Dim nRow As Integer

    nRow = e.RowIndex
    nColumn = e.ColumnIndex

    If Not IsDBNull(e.ColumnIndex) Then
        If e.RowIndex > -1 Then
            If nColumn = 1 Then '--Column ShopName----
                If IsDBNull(DataGridView1.Rows(e.RowIndex).Cells(1).Value) 
                                                                      Then
                    MsgBox("Shop Name Should not be Empty.")
                Else
                    Dim cb As New OleDb.OleDbCommandBuilder(Dadapter)

                    conList.Open()
                    Dadapter.Update(DSet, "myShop")
                    DSet.AcceptChanges()
                    conList.Close()
                End If
            End If

        End If

    End If

End Sub

但数据未保存。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

在cellValueChanged事件期间,数据集的HasChanges仍为False。这似乎是数据库未更新的原因。您需要调用数据行的BeginEdit和EndEdit方法。

像这样的东西

        Dim shopRow() As Data.DataRow
        shopRow = DSet.Tables(0).Select("UniqueID = " & id)
        shopRow(0).BeginEdit()
        shopRow(0).EndEdit()

这会将hasChanges状态更改为True。