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

C# WinForm:Excel导入DataGridView后双条件过滤实现需求

实现DataGridView的条件过滤逻辑

没问题,我来帮你搞定这个过滤需求!既然你已经把Excel数据成功导入到DataGridView里了,咱们直接在btnFetch的点击事件里写过滤代码就行,完全贴合你要的「Departure Airport = BIKF 且 Arrival Airport = 用户输入值」的条件。

核心思路

咱们可以利用DataView的RowFilter属性来做过滤(假设你的DataGridView绑定的是DataTable,这也是Excel导入最常用的数据源类型),这样既能保留原数据,又能快速实现过滤效果。同时还要处理用户输入为空的情况,避免出现逻辑错误。

完整代码示例

假设你的到达机场输入框叫txtArrivalAirport,DataGridView控件叫dataGridView1,直接把下面的代码放到按钮点击事件里:

private void btnFetch_Click(object sender, EventArgs e)
{
    // 获取用户输入的到达机场,先去除前后空格
    string arrivalAirport = txtArrivalAirport.Text.Trim();
    
    // 转义单引号,避免过滤条件语法出错(比如用户输入了带单引号的内容)
    arrivalAirport = arrivalAirport.Replace("'", "''");
    
    // 检查DataGridView的数据源是否为DataTable
    if (dataGridView1.DataSource is DataTable flightDataTable)
    {
        // 创建DataView来处理过滤
        DataView filteredView = new DataView(flightDataTable);
        
        // 构建过滤条件:固定Departure Airport为BIKF
        string filter = "`Departure Airport` = 'BIKF'";
        
        // 如果用户输入了到达机场,追加第二个条件
        if (!string.IsNullOrEmpty(arrivalAirport))
        {
            filter += $" AND `Arrival Airport` = '{arrivalAirport}'";
        }
        
        // 应用过滤条件
        filteredView.RowFilter = filter;
        
        // 把过滤后的数据重新绑定到DataGridView
        dataGridView1.DataSource = filteredView;
    }
}

关键细节说明

  1. 列名转义:因为你的列名包含空格(比如Departure Airport),所以在RowFilter里要用反引号`把列名括起来,不然会报错。
  2. 输入安全处理:用Replace("'", "''")转义单引号,防止用户输入带单引号的内容导致过滤条件语法错误。
  3. 空输入兼容:如果用户没填写到达机场,代码会只过滤出Departure Airport为BIKF的所有数据,不会出现无效的过滤条件。
  4. 模糊匹配可选:如果你想支持模糊匹配(比如用户输入部分机场代码也能搜到),可以把=改成LIKE,比如:
    filter += $" AND `Arrival Airport` LIKE '%{arrivalAirport}%'";
    

如果你的数据源是实体类列表(比如List)

要是你导入Excel后把数据存成了自定义实体类的列表,那可以用Linq来过滤:

// 假设你有原始数据列表originalFlightList,Flight类有DepartureAirport和ArrivalAirport属性
private void btnFetch_Click(object sender, EventArgs e)
{
    string arrivalAirport = txtArrivalAirport.Text.Trim();
    
    var filteredFlights = originalFlightList
        .Where(f => f.DepartureAirport == "BIKF")
        .ToList();
    
    if (!string.IsNullOrEmpty(arrivalAirport))
    {
        filteredFlights = filteredFlights
            .Where(f => f.ArrivalAirport == arrivalAirport)
            .ToList();
    }
    
    dataGridView1.DataSource = filteredFlights;
}

这样就能完美实现你要的过滤功能啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:12:17