如何在DataGridView的所有列中实现值搜索?附现有代码
实现DataGridView全列搜索的修改方案
修改后的代码
try { var searchValue = textBox1.Text.Trim().Replace("'", "''"); if (string.IsNullOrEmpty(searchValue)) { ((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = string.Empty; return; } var filterConditions = new List<string>(); foreach (DataGridViewColumn col in dataGridView1.Columns) { // 跳过不可见列(可选,按需调整) if (!col.Visible) continue; string condition; // 根据列数据类型适配搜索逻辑,避免转换异常 switch (col.ValueType.Name) { case "String": condition = $"{col.Name} LIKE '%{searchValue}%'"; break; case "Int32": case "Double": case "Decimal": // 输入为有效数值时才匹配数值列 if (double.TryParse(searchValue, out _)) { condition = $"{col.Name} = {searchValue}"; } else { continue; } break; case "DateTime": // 输入为有效日期时才匹配日期列 if (DateTime.TryParse(searchValue, out _)) { condition = $"CONVERT({col.Name}, System.String) LIKE '%{searchValue}%'"; } else { continue; } break; default: // 其他类型统一转字符串匹配 condition = $"CONVERT({col.Name}, System.String) LIKE '%{searchValue}%'"; break; } filterConditions.Add(condition); } // 用OR连接所有列的搜索条件 ((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = string.Join(" OR ", filterConditions); } catch (Exception exc) { MessageBox.Show(exc.Message); }
核心调整说明
- 遍历所有列:不再固定单一列,循环处理
dataGridView1的所有列 - 空值重置:搜索框为空时清空筛选规则,恢复显示全部数据
- 分类型适配:针对字符串、数值、日期等不同数据类型做匹配优化,避免类型转换错误
- 防护处理:保留原代码的
Replace("'", "''")操作,避免单引号引发的筛选语法错误
内容的提问来源于stack exchange,提问作者uyku
相关产品推荐
相关产品推荐

