DataGridViewLinkCell异常:C# SQL Server CRUD点击单元格程序崩溃求助
问题描述
我正在尝试用C#和SQL Server实现第一个CRUD功能,但每次运行程序点击不同单元格时,程序都会崩溃。以下是触发崩溃的代码:
private void MLA_CellContentClick(object sender, DataGridViewCellEventArgs e) { DataGridViewLinkCell cell = (DataGridViewLinkCell)MLA.Rows[e.RowIndex].Cells[e.ColumnIndex]; if (cell.Value.ToString() == "EDITAR") { AgregarMLA agregarMLA = new AgregarMLA(); agregarMLA.LoadContact(new tablaMLA { URL_ID = int.Parse(MLA.Rows[e.RowIndex].Cells[0].Value.ToString()), URL_QUERY = (MLA.Rows[e.RowIndex].Cells[1]).Value.ToString() }); agregarMLA.ShowDialog(this); } else if (cell.Value.ToString() == "BORRAR") { BorrarMLA(int.Parse(MLA.Rows[e.RowIndex].Cells[0].Value.ToString())); Populate(); } }
点击SQL Server查询结果的任意单元格都会崩溃,关于DataGridViewLinkCell的资料不多,我已经没别的办法尝试了。
修复方案
代码崩溃的核心原因是未做类型校验、空值处理和索引有效性检查,以下是修复后的完整代码及关键说明:
关键修复点
- 排除表头点击:
e.RowIndex为-1时直接返回,避免访问无效行 - 校验单元格类型:仅处理
DataGridViewLinkCell类型的单元格,避免强制转换错误 - 空值与格式校验:对单元格值做空值判断,用
int.TryParse替代int.Parse避免转换失败
修复后代码
private void MLA_CellContentClick(object sender, DataGridViewCellEventArgs e) { // 点击表头时直接返回,避免无效行访问 if (e.RowIndex < 0) return; // 仅处理链接单元格,跳过普通单元格点击 if (!(MLA.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewLinkCell linkCell)) { return; } // 安全获取单元格文本,避免空引用 string cellText = linkCell.Value?.ToString() ?? string.Empty; if (cellText == "EDITAR") { // 安全解析ID值,处理空值和格式错误 var idValue = MLA.Rows[e.RowIndex].Cells[0].Value; if (idValue == null || !int.TryParse(idValue.ToString(), out int urlId)) { MessageBox.Show("无法获取有效ID"); return; } // 安全获取查询文本,空值转为空字符串 string queryText = MLA.Rows[e.RowIndex].Cells[1].Value?.ToString() ?? string.Empty; AgregarMLA agregarMLA = new AgregarMLA(); agregarMLA.LoadContact(new tablaMLA { URL_ID = urlId, URL_QUERY = queryText }); agregarMLA.ShowDialog(this); } else if (cellText == "BORRAR") { var idValue = MLA.Rows[e.RowIndex].Cells[0].Value; if (idValue == null || !int.TryParse(idValue.ToString(), out int urlId)) { MessageBox.Show("无法获取有效ID"); return; } BorrarMLA(urlId); Populate(); } }
内容的提问来源于stack exchange,提问作者Juan Pablo Humani
相关产品推荐
相关产品推荐

