GridView行数据传递至其他Web Form时遇空引用异常求助
解决DataGridView行数据传递时的空引用异常
嘿,我看到你遇到了System.NullReferenceException的问题,这在WinForms(从代码风格看更偏向这个场景,如果你实际是Web Form的话后面会补充说明)里传递DataGridView行数据时挺常见的,咱们一步步排查解决:
可能的原因及对应修复方案
1. 先确认点击的是有效数据行
当用户点击DataGridView的表头、空白单元格或者非数据行区域时,CurrentRow会是null,这时候访问它的Cells自然就会抛出空引用异常。
修复方法:先判断CurrentRow是否存在,同时确保点击的是数据行(e.RowIndex >= 0,因为表头的RowIndex是-1):
public void dgvEmployee_CellContentClick(object sender, DataGridViewCellEventArgs e) { // 先判断是否点击了有效数据行 if (e.RowIndex < 0 || dgvEmployee.CurrentRow == null) { return; // 不是有效行,直接返回 } this.Close(); Update up = new Update(); // 后续赋值逻辑... }
2. 处理单元格Value为空的情况
如果某一行的第0或第1列的值是DBNull或者null,直接调用ToString()也会报错。这时候要先做空值判断:
// 安全获取单元格文本,空值时返回空字符串 up.IdBox.Text = dgvEmployee.CurrentRow.Cells[0].Value?.ToString() ?? string.Empty; up.NameBox.Text = dgvEmployee.CurrentRow.Cells[1].Value?.ToString() ?? string.Empty;
这里用了C#的空传播运算符?.和空合并运算符??,如果Value是null,就不会执行ToString(),而是直接返回空字符串,避免报错。
3. 检查Update窗体的控件是否正确
有时候你可能在Update窗体里把控件的Name写错了(比如写成了idBox而不是IdBox,C#是大小写敏感的),或者控件根本没有添加到窗体上,这时候访问up.IdBox就会是null,赋值时也会抛出异常。
修复方法:
- 打开Update窗体的设计器,确认控件的Name属性确实是
IdBox和NameBox - 确保这些控件已经正确拖放到窗体上,没有被意外删除
完整的修复后代码示例
public void dgvEmployee_CellContentClick(object sender, DataGridViewCellEventArgs e) { // 验证点击的是有效数据行 if (e.RowIndex < 0 || dgvEmployee.CurrentRow == null) { MessageBox.Show("请选择有效的员工行!"); return; } Update up = new Update(); // 安全赋值,处理空值情况 up.IdBox.Text = dgvEmployee.CurrentRow.Cells[0].Value?.ToString() ?? string.Empty; up.NameBox.Text = dgvEmployee.CurrentRow.Cells[1].Value?.ToString() ?? string.Empty; this.Close(); up.Show(); // 别忘了显示新窗体哦,你之前的代码里好像没写这一步 }
额外提醒:如果实际是Web Form场景,DataGridView的处理逻辑会不一样(Web是无状态的),这时候你需要用Session或者QueryString来传递数据,而不是直接实例化Web Form赋值。不过从你的代码片段来看更偏向WinForms,先按这个场景给你解决啦。
内容的提问来源于stack exchange,提问作者rbshubham
相关产品推荐
相关产品推荐

