You can set CellEndEdit
event simply like this:
private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
DataGridViewCell cell = this.DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex);
cell.ReadOnly = true;
}
VB.NET:
Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
Dim cell As DataGridViewCell = Me.DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex)
cell.ReadOnly = True
End Sub
And if you have data in the DataGridView
at the beginning, you can set the access after you load the data like this:
SetAccess(this.DataGridView1);
VB.NET:
Call SetAccess(Me.DataGridView1)
...providing this function in your class:
private void SetAccess(DataGridView dgw)
{
for (var ir = 0; ir <= dgw.Rows.Count - 1; ir++)
{
for (var ic = 0; ic <= dgw.Columns.Count - 1; ic++)
{
DataGridViewCell cell = this.DataGridView1.Rows(ir).Cells(ic);
if (!IsNothing(cell.Value) && cell.Value.ToString.Length > 0)
cell.ReadOnly = true;
}
}
}
VB.NET:
Private Sub SetAccess(dgw As DataGridView)
For ir = 0 To dgw.Rows.Count - 1
For ic = 0 To dgw.Columns.Count - 1
Dim cell As DataGridViewCell = Me.DataGridView1.Rows(ir).Cells(ic)
If Not IsNothing(cell.Value) AndAlso cell.Value.ToString.Length > 0 Then
cell.ReadOnly = True
End If
Next
Next
End Sub
Tested, all works as a charm.
Obviously you can play with the code, i.e. excluding the last column by modifying the range of column loop:
For ic = 0 To dgw.Columns.Count - 2
VB.NET (same):
For ic = 0 To dgw.Columns.Count - 2
Sorry, missed the c# tag when replied first.