Vb.net DataGridViewCheckBoxColumn单元格内容单击事件问题
我有一个带有复选框的DGV列,我想在用户单击复选框时触发一个事件,触发后,事件系统将检查复选框是否选中,然后不执行其他操作。问题是,当我单击复选框时,系统总是先更改复选框状态,然后仅触发下面的事件,如何使其先触发下面的事件,然后仅更改复选框状态 为了简单起见,我希望当用户单击复选框,然后单击messagebox提示符,如果是MsgBoxResult.Yes,则复选框.Checked=True,并触发下面的事件,如果是MsgBoxResult.No,则不执行任何操作 我已经尝试将select case messagebox添加到下面的代码中,但系统仍然会首先更改复选框状态,然后仅更改提示messagebox对话框Vb.net DataGridViewCheckBoxColumn单元格内容单击事件问题,vb.net,datagridview,Vb.net,Datagridview,我有一个带有复选框的DGV列,我想在用户单击复选框时触发一个事件,触发后,事件系统将检查复选框是否选中,然后不执行其他操作。问题是,当我单击复选框时,系统总是先更改复选框状态,然后仅触发下面的事件,如何使其先触发下面的事件,然后仅更改复选框状态 为了简单起见,我希望当用户单击复选框,然后单击messagebox提示符,如果是MsgBoxResult.Yes,则复选框.Checked=True,并触发下面的事件,如果是MsgBoxResult.No,则不执行任何操作 我已经尝试将select ca
Private Sub dgv_supplier_CellContentClick(sender As System.Object, e As DataGridViewCellEventArgs) Handles dgv_supplier.CellContentClick
Dim senderGrid = DirectCast(sender, DataGridView)
If (e.ColumnIndex >= 0 And e.RowIndex >= 0) Then
If TypeOf senderGrid.Columns(e.ColumnIndex) Is DataGridViewCheckBoxColumn AndAlso e.RowIndex >= 0 Then
Dim index = e.RowIndex
Dim currRow = dgv_supplier.Rows(index)
Dim str_supName = currRow.Cells("sup_name").Value
If currRow.Cells("checkbox").Value = True Then
Exit Sub
Else
'Do something
End If
End If
End If
End Sub
使用,它在更改单元格的实际值之前升高
Private Sub dgv_supplier_CurrentCellDirtyStateChanged(
sender As Object,
e As EventArgs) Handles dgv_supplier.CurrentCellDirtyStateChanged
Dim senderGrid = DirectCast(sender, DataGridView)
Dim cell = senderGrid.CurrentCell
If cell.ColumnIndex < 0 Then Exit Sub
If cell.RowIndex < 0 Then Exit Sub
Dim checkBoxCell = TryCast(senderGrid.CurrentCell, DataGridViewCheckBoxColum)
If checkBoxCell Is Nothing Then Exit Sub
Dim currentRow = cell.OwningRow
Dim str_supName = currentRow.Cells("sup_name").Value
' currentCell.Value is previous value before click
If currentCell.Value = True Then
' commit changes
senderGrid.CommitEdit(DataGridViewDataErrorContexts.Commit)
Else
' Do something
End If
End Sub