I have a similar question up here, but a thought has struck me which I must try.
Putting a conditional check in the cell begin edit, and if true, set your cells readonly then leave the CellBeginEdit event.
<pre lang="cs">if(Set_some_cells_readonly && (e.ColumnIndex == 0
|| e.ColumnIndex == 1
|| e.ColumnIndex == 2))
{
dgv.Rows[e.RowIndex].Cells[0].ReadOnly = true;
dgv.Rows[e.RowIndex].Cells[1].ReadOnly = true;
dgv.Rows[e.RowIndex].Cells[2].ReadOnly = true;
dgv.CurrentCell.Selected = false;
dgv.CurrentCell = nullptr;
return;
}
else
{
dgv.Rows[e.RowIndex].Cells[0].ReadOnly = false;
dgv.Rows[e.RowIndex].Cells[1].ReadOnly = false;
dgv.Rows[e.RowIndex].Cells[2].ReadOnly = false;
}