You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在DataGridView的EditingControlShowing事件中实时获取单元格值遇空引用异常

解决DataGridView实时获取单元格输入值时的空引用异常问题

你遇到的NullReferenceException主要有两个核心原因:

  1. 在EditingControlShowing事件触发时,单元格的新输入值还没同步到DataGridViewCell.Value属性中,直接访问会拿到空值;
  2. 如果单元格原本为空,调用Value.ToString()自然会触发空引用异常。

要实现实时获取输入内容的需求,正确的思路是给编辑控件绑定TextChanged事件,而不是直接在EditingControlShowing里取单元格值。下面是修正后的完整代码:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    // 先移除旧的事件绑定,避免重复触发
    if (e.Control is TextBox editTextBox)
    {
        editTextBox.TextChanged -= EditTextBox_TextChanged;
        editTextBox.TextChanged += EditTextBox_TextChanged;
    }
}

private void EditTextBox_TextChanged(object sender, EventArgs e)
{
    // 确认当前编辑的是第1行第1列(注意:行/列索引从0开始,UI上的第1行对应Index=0)
    if (dataGridView1.CurrentRow.Index == 0 && dataGridView1.CurrentCell.ColumnIndex == 0)
    {
        var inputTextBox = sender as TextBox;
        // 直接从TextBox获取实时输入内容,不会出现空引用
        Console.WriteLine("cell value on live = " + inputTextBox.Text);
        
        // 若需要同步更新单元格的Value属性,可取消下面的注释
        // dataGridView1.CurrentCell.Value = inputTextBox.Text;
    }
}

关键说明:

  • EditingControlShowing事件触发时,我们先拿到正在编辑的TextBox控件,先移除旧的TextChanged绑定再添加新的,防止多次绑定导致事件重复执行;
  • 在TextChanged事件里先判断当前编辑的单元格是否是目标位置,避免对其他单元格的输入做出响应;
  • 直接读取TextBox的Text属性获取实时内容,即使输入为空,Text也是空字符串而非null,彻底避免空引用异常。

内容的提问来源于stack exchange,提问作者user2809386

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:12:27