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

如何通过TextBox在DataGridView中搜索指定行?代码异常求助

问题排查与修复方案

嘿,我一眼就瞅出问题在哪了——你写搜索按钮代码的时候,犯了个很容易踩的小坑:你直接把txt_Search_Id控件本身传到字符串格式化里了,而不是获取它的**Text属性**!

这会导致生成的RowFilter条件变成类似 CONVERT(Id_Student, System.String) like '%System.Windows.Forms.TextBox, Text: 你的输入内容%' 这种完全无效的筛选规则,自然找不到匹配的行,DataGridView就被清空了。

修复后的代码

private void Search_Click(object sender, EventArgs e) {
    // 先拿到输入框的文本,顺便去掉前后空格
    string searchContent = txt_Search_Id.Text.Trim();
    
    DataView DV = dt.DefaultView;
    if (string.IsNullOrEmpty(searchContent)) {
        // 如果输入为空,直接显示所有数据
        DV.RowFilter = string.Empty;
    } else {
        // 这里要使用控件的Text属性,同时处理特殊字符避免语法错误
        DV.RowFilter = string.Format("CONVERT(Id_Student, System.String) LIKE '%{0}%'", searchContent.Replace("'", "''"));
    }
    // 直接绑定DataView就好,不用转成DataTable,还能保留排序等特性
    dataGridView1.DataSource = DV;
}

几个额外的优化点

  • 直接绑定DataView而非转成DataTable:这样可以保留DataView自带的排序、筛选等功能,后续操作更灵活。
  • 处理空输入:当用户清空搜索框时,自动恢复显示所有数据,提升体验。
  • 替换单引号:避免用户输入特殊字符导致筛选语法报错(虽然DataView的RowFilter不会有SQL注入风险,但能防止意外的语法异常)。
  • Trim输入文本:避免用户不小心输入的前后空格导致匹配失败。

内容的提问来源于stack exchange,提问作者Dzeko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:32:37