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; } }
关键细节说明
- 列名转义:因为你的列名包含空格(比如
Departure Airport),所以在RowFilter里要用反引号`把列名括起来,不然会报错。 - 输入安全处理:用
Replace("'", "''")转义单引号,防止用户输入带单引号的内容导致过滤条件语法错误。 - 空输入兼容:如果用户没填写到达机场,代码会只过滤出Departure Airport为BIKF的所有数据,不会出现无效的过滤条件。
- 模糊匹配可选:如果你想支持模糊匹配(比如用户输入部分机场代码也能搜到),可以把
=改成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
相关产品推荐
相关产品推荐

