Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net DataGridViewCheckBoxColumn单元格内容单击事件问题_Vb.net_Datagridview - Fatal编程技术网

Vb.net DataGridViewCheckBoxColumn单元格内容单击事件问题

Vb.net DataGridViewCheckBoxColumn单元格内容单击事件问题,vb.net,datagridview,Vb.net,Datagridview,我有一个带有复选框的DGV列,我想在用户单击复选框时触发一个事件,触发后,事件系统将检查复选框是否选中,然后不执行其他操作。问题是,当我单击复选框时,系统总是先更改复选框状态,然后仅触发下面的事件,如何使其先触发下面的事件,然后仅更改复选框状态 为了简单起见,我希望当用户单击复选框,然后单击messagebox提示符,如果是MsgBoxResult.Yes,则复选框.Checked=True,并触发下面的事件,如果是MsgBoxResult.No,则不执行任何操作 我已经尝试将select ca

我有一个带有复选框的DGV列,我想在用户单击复选框时触发一个事件,触发后,事件系统将检查复选框是否选中,然后不执行其他操作。问题是,当我单击复选框时,系统总是先更改复选框状态,然后仅触发下面的事件,如何使其先触发下面的事件,然后仅更改复选框状态

为了简单起见,我希望当用户单击复选框,然后单击messagebox提示符,如果是MsgBoxResult.Yes,则复选框.Checked=True,并触发下面的事件,如果是MsgBoxResult.No,则不执行任何操作

我已经尝试将select case messagebox添加到下面的代码中,但系统仍然会首先更改复选框状态,然后仅更改提示messagebox对话框

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