You need to enable JavaScript to run this app. WPF中基于文本框输入值匹配列值过滤SQL初始化的DataGrid
优惠活动
大模型
产品
解决方案
定价
更多

WPF中基于文本框输入值匹配列值过滤SQL初始化的DataGrid

DataGrid 基于文本框输入ID的等值过滤实现

你初始化加载数据的核心逻辑如下:

NpgsqlCommand cmd = new NpgsqlCommand("select * from central.equipment where equipment.deleted = 1", con);
NpgsqlDataAdapter da = new NpgsqlDataAdapter();
da.SelectCommand = cmd;

DataTable dt = new DataTable();
da.Fill(dt);

dataGridView1.Columns[0].Name = "emp_id";
dataGridView1.Columns[0].HeaderText = "Employee ID";
dataGridView1.Columns[0].DataPropertyName = "emp_id";

适配现有WinForm DataGridView的实现

无需重新向数据库发起查询,直接复用已加载到内存的DataTable,通过内置DataView的过滤能力就能实现和内连接一致的等值匹配效果:

  • 初始化完成后,给DataGridView绑定数据源时持有DataTable对象,不要完成填充就丢失对象引用
    在现有初始化代码最后补充绑定逻辑:
    // 把DataTable绑定到控件,后续调整过滤规则直接操作对应视图即可
    dataGridView1.DataSource = dt;
    
  • 给输入ID的文本框绑定文本变化事件,在回调逻辑里修改视图过滤规则
    假设文本框名为txt_EmpIdFilter,对应事件代码:
    private void txt_EmpIdFilter_TextChanged(object sender, EventArgs e)
    {
        if (string.IsNullOrWhiteSpace(txt_EmpIdFilter.Text))
        {
            // 文本框清空时展示全部已加载的数据
            dt.DefaultView.RowFilter = string.Empty;
        }
        else
        {
            // 对数值类型的emp_id列做精准等值匹配,和内连接的关联逻辑完全一致
            dt.DefaultView.RowFilter = $"emp_id = {txt_EmpIdFilter.Text.Trim()}";
        }
    }
    

实现注意事项

  • 这套逻辑是纯内存级操作,不会反复请求数据库,过滤响应速度为毫秒级
  • 如果emp_id是字符串类型,把过滤规则调整为支持单引号转义的写法,避免RowFilter语法报错:
    dt.DefaultView.RowFilter = $"emp_id = '{txt_EmpIdFilter.Text.Trim().Replace("'", "''")}'";
    
  • 过滤逻辑仅作用于视图层:不符合匹配规则的行会被临时隐藏,不会删除内存DataTable里的原始数据,清空过滤条件就能立刻还原全部记录

纯WPF DataGrid场景的实现

  • 注意:你现有代码中的dataGridView1是WinForm平台的控件,如果是纯WPF项目,对应控件是DataGrid,不要套用WinForm的DataView逻辑,通过CollectionViewSource实现绑定过滤即可
  • 初始化时将数据集合挂载到CollectionViewSource上
  • 监听文本框的输入变化,在过滤回调里逐行判断emp_id和输入值是否匹配,不满足匹配规则的行会被自动排除在DataGrid的展示范围外

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 21:15:01