El
e.Cancel = True, lo que hace es evitar que el click que el usuario ha hecho en el checkbox edite la celda.
El codigo seria:
Código:
If e.ColumnIndex = 0 Then
If MessageBox.Show("si o no?", "", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No Then
dataGridView1.Rows(e.RowIndex).Cell(0).Value = False
Else
dataGridView1.Rows(e.RowIndex).Cell(0).Value = True
End If
e.Cancel = True
End If
Debes establecer e.Cancel a True independientemente de lo que haya escogido el usuario.
La propiedad Value la debes establecer a un Bool, ya que es un checkbox. Asegurate de hacerlo en el evento CellBeginEdit, o no funcionara correctamente.
Ya me diras si te va bien asi.