在DataGridView的EditingControlShowing事件中实时获取单元格值遇空引用异常
解决DataGridView实时获取单元格输入值时的空引用异常问题
你遇到的NullReferenceException主要有两个核心原因:
- 在
EditingControlShowing事件触发时,单元格的新输入值还没同步到DataGridViewCell.Value属性中,直接访问会拿到空值; - 如果单元格原本为空,调用
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
相关产品推荐
相关产品推荐

