Попробуйте событие CellBeginEdit
Private Sub Dgv_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles Dgv.CellBeginEdit
If YourCondition(BoundItem.Property) then e.cancel = true
End Sub
Это делает ячейку доступной только для чтения в зависимости от вашего состояния.