C#编程选中DataGridView行及解决值不存在时的异常问题
解决DataGridView搜索无匹配值时的异常问题
问题出在哪?
你这段代码里的.First()方法是“罪魁祸首”!当输入的内容在DataGridView里找不到匹配行时,.First()会直接抛出InvalidOperationException——因为它要求必须找到至少一个元素,找不到就直接炸锅,这就是输入不存在的值时程序崩溃的原因。
修复后的完整代码
把.First()换成.FirstOrDefault()(找不到匹配项时会返回null),再加上空值判断,就能完美避免异常了。修改后的代码如下:
private void Searchvalue_TextChanged(object sender, EventArgs e) { dataGridView1.ClearSelection(); var enteredText = (sender as TextBox).Text; bool tempAllowUserToAddRows = dataGridView1.AllowUserToAddRows; // 临时关闭新增行,避免Value为null的异常 dataGridView1.AllowUserToAddRows = false; if (!string.IsNullOrEmpty(enteredText)) { // 用FirstOrDefault替代First,无匹配时返回null DataGridViewRow row = dataGridView1.Rows .Cast<DataGridViewRow>() .Where(r => r.Cells["Column1"].Value?.ToString().Contains(enteredText) == true) .FirstOrDefault(); if (row != null) { // 确认找到行再执行选中操作 dataGridView1.Rows[row.Index].Selected = true; dataGridView1.FirstDisplayedScrollingRowIndex = row.Index; } } // 不管有没有找到,都恢复原有的AllowUserToAddRows设置 dataGridView1.AllowUserToAddRows = tempAllowUserToAddRows; }
关键修改说明
- 替换查询方法:用
FirstOrDefault()替代First(),确保无匹配时不会抛出异常,而是返回null - 增加空值判断:只有当找到有效行(
row != null)时,才执行选中和滚动操作 - 优化空安全:给
Value加上空合并运算符?.,避免单元格值为null时调用ToString()抛出空引用异常 - 调整恢复设置的位置:把恢复
AllowUserToAddRows的代码移到if分支外面,确保无论是否输入内容,都会恢复原有设置,避免出现意外状态
内容的提问来源于stack exchange,提问作者KAMAL96
相关产品推荐
相关产品推荐

