【问题标题】:Change DataGridView Cell Value Programmatically以编程方式更改 DataGridView 单元格值
【发布时间】:2013-12-13 13:47:04
【问题描述】:

我有一个 datagridview,它有一个数据表作为数据源。我需要手动更改一些单元格值。例如,如果单元格输入值包含字符“g”,则当我离开单元格时,它必须自动更改“abc”。以下代码检查当前单元格的格式化值:

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

当代码“dgwPNotlar.EndEdit();”运行,我更改的单元格值为“abc”,返回之前的值为“g”或“G”..

有什么想法吗?

【问题讨论】:

  • 是的。 @LarsTech 答案是最好和最简单的解决方案

标签: c# winforms datagridview


【解决方案1】:

单元格的更改需要在验证事件之后发生,因此请尝试使用 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";
  }
}

【讨论】:

  • 答案是最好和最简单的解决方案。
【解决方案2】:

这是我在 VB 中应用他的解决方案的代码:

Private Sub dataGridView_CellValidated(sender As Object, e As DataGridViewCellEventArgs) Handles dataGridView.CellValidated

    Dim cellValue As String = dataGridView.Rows(e.RowIndex).Cells(e.ColumnIndex).FormattedValue.ToString()
    If (cellValue.Contains(".")) Then
        cellValue = cellValue.Replace(".", ",")
        dataGridView.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = cellValue
    End If
End Sub

【讨论】:

  • 欢迎来到 SO。不需要写“有效”,投票就够了
  • 谢谢古尔坎 :-)
猜你喜欢
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多