简体   繁体   English

以编程方式更改DataGridView单元格值

[英]Change DataGridView Cell Value Programmatically

I have a datagridview which has a datatable as data source. 我有一个datagridview,它有一个数据表作为数据源。 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. 例如,如果单元格输入值包含字符“g”,则在离开单元格时它必须自动更改“abc”。 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();" 当代码“dgwPNotlar.EndEdit();” runs, the cell value I changed is "abc", returns to previous value as "g" or "G".. 运行时,我更改的单元格值为“abc”,返回上一个值为“g”或“G”。

Any ideas? 有任何想法吗?

The changing of the cell needs to happen after the validating event, so try the CellValidated event instead: 在验证事件之后需要更改单元格,因此请尝试使用CellValidated事件:

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";
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM