我在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
但数据未保存。任何人都可以帮助我吗?
答案 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。