[ Change DataGridView Cell Value Programmatically ]
I have a datagridview which has a datatable as data source. I need to change some cell values manually. For example, if cell input value contains character 'g', it must change "abc" automatically when I leave cell. Following code checks the formatted value of current cell:
private void dgwPNotlar_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (e.ColumnIndex<2||e.ColumnIndex>4||e.FormattedValue.ToString()=="")
{
return;
}
if (e.FormattedValue.ToString().Contains('G')||e.FormattedValue.ToString().Contains('g'))
{
dgwPNotlar.EditMode = DataGridViewEditMode.EditProgrammatically;
dgwPNotlar.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "abc";
dgwPNotlar.EndEdit();
dgwPNotlar.EditMode = DataGridViewEditMode.EditOnEnter;
return;
}
}
When the code "dgwPNotlar.EndEdit();" runs, the cell value I changed is "abc", returns to previous value as "g" or "G"..
Any ideas?
Answer 1
The changing of the cell needs to happen after the validating event, so try the CellValidated event instead:
void dgv_CellValidated(object sender, DataGridViewCellEventArgs e) {
string cellValue = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].FormattedValue.ToString();
if (cellValue.Contains('G') || cellValue.Contains('g')) {
dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "abc";
}
}