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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:59:31