DataGridView:单元格值更改时更新SQL数据库
我创建了一个包含DataGridView并创建第一列作为复选框列和fullrowselect为True的表单。
我希望当我单击该行的复选框或更改所选行的复选框值时,该特定记录应该在数据库中更新...DataGridView:单元格值更改时更新SQL数据库
我写了查询,但面对下面提到的一些问题。
现在我第一次在小区click事件试过...
Private Sub DGVHelp_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DGVHelp.CellClick
Try
If PubHelpCode = "ACTMAST" And e.ColumnIndex = 0 Then 'if only checkbox column is clicked
cmd = New SqlCommand("Update FAMPAR SET Tag = '" & DGVHelp(0, e.RowIndex).Value & "' where Account_Code = '" & DGVHelp(1, e.RowIndex).Value & "' ", con1)
ExecuteQuery(con1, "EDITCHECKBOX") ' Its my UDF
DGV_Reset()' This clears the datagrid and fetch the data again
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
当我点击复选框单元格(第一列),该单元格的值发生变化的情况下第一次运行,然后...即在单元格单击事件期间,如果DGVHelp(0,e.RowIndex).Value的值在打勾或未打勾时不会更改其值。
我甚至尝试cellvaluechanged事件,但它通过一些连续的过程,我不知道挂程序...
我应该使用哪个事件来完成我的任务?
如果有关该任务的任何其他意见/想法是有,那么请共享......
守则OneDrive以下链接共享..
Solution Code link
在这个问题更好的解决方案将是使用DataGridView.CellMouseClick
事件。只有当您点击任何单元格时,此事件才会触发。
Private Sub DataGridView1_CellMouseClick(sender as Object, e as DataGridViewCellMouseEventArgs) _
Handles DataGridView1.CellMouseClick
'todo
End Sub
是的,我想鼠标点击事件,但如果复选框有空格键改变,那么它将无法工作...... // @ MWW – bonny
您必须使用DataGridView.CellValueChanged
事件。这是与您一起合作的最佳活动。使用MouseClick
事件不是一个好主意。
里面的事件的子使用DataGridViewCellEventArgs
e.columnIndex
属性来检查编辑的colunn是包含复选框的一个。否则,你必须检查你的代码。
最好是使用
Using
子句SqlCommand类工作时
Using cmd as New SqlCommand("Update FAMPAR SET Tag = '" & DGVHelp(0, e.RowIndex).Value & "' where Account_Code = '" & DGVHelp(1, e.RowIndex).Value & "' ", con1)
ExecuteQuery(con1, "EDITCHECKBOX") ' Its my UDF
End Using
编辑1:
检查你的解决方案之后。它不是很清楚,但你可以做一些解决方法。
1-定义布尔变量m_BoolValueChanged
Private m_BoolValueChanged as Boolean = True
2-使用此变量在DGVHelp_CellValueChanged
子,以防止无限循环。喜欢以下内容:
Private Sub DGVHelp_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DGVHelp.CellValueChanged
Try
If PubHelpCode = "ACTMAST" And e.ColumnIndex = 0 Then
If m_BoolValueChanged Then
m_BoolValueChanged = False
cmd = New SqlCommand("Update FAMPAR SET Tag = '" & DGVHelp(0, e.RowIndex).Value & "' where Account_Code = '" & DGVHelp(1, e.RowIndex).Value & "' ", con1)
ExecuteQuery(con1, "EDITCHECKBOX")
Dim ri As Integer = DGVHelp.CurrentRow.Index
DGV_Reset()
DGVHelp.Rows(ri).Selected = True
m_BoolValueChanged = False
End If
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
您可能会找到更好的解决办法,但是这将有助于
当你点击一个'DataGridViewCheckBox',你做对细胞的变化不会立即提交到数据源,直到您完成编辑单元格,然后更改将被推送到数据源。该'CellClick'或'CellContentClick'将是美好的,但你需要提交修改到数据源,否则你读出的值是不是你看到的价值。看看这篇文章:[DataGridView的复选框列不适改变底层绑定对象(http://stackoverflow.com/a/40348082/3110834) –
不要找任何其它事件,只要使用' CellClick'或'CellContentClick' [这种方式](http://stackoverflow.com/a/34090635/3110834)。 –
雅我尽量@RezaAghaei – bonny