Powershell WinForms:如何让ComboBox实现DataGridView模糊搜索?
解决DataGridView部分关键词搜索问题
问题核心在于你用了$ComboBox1.SelectedItem获取输入内容——这个属性只会返回下拉列表中已选中的完整选项,当你输入部分关键词且没有对应的下拉项时,它根本拿不到你输入的文本,自然没法匹配。另外,当前的匹配逻辑也没做部分匹配处理,下面是修正后的代码:
# 搜索按钮 $Button1.Add_Click( { # 获取用户输入的文本(去掉首尾空格) $searchKeyword = $ComboBox1.Text.Trim() # 如果输入为空,显示所有行 if ([string]::IsNullOrEmpty($searchKeyword)) { foreach ($Row in $dataGridView1.Rows) { $DataGridView1.Rows[$row.Index].Visible = $true } return } # 遍历行,匹配包含关键词的内容 foreach ($Row in $dataGridView1.Rows) { # 用-like做通配符匹配,*代表任意字符 if ($Row.Cells[0].Value.ToString() -like "*$searchKeyword*") { $DataGridView1.Rows[$row.Index].Visible = $true } else { $DataGridView1.Rows[$row.Index].Visible = $false } } })
关键修改点:
- 改用
$ComboBox1.Text获取用户输入的实际内容,而非依赖选中的下拉项 - 增加空输入判断,避免无输入时全部隐藏行
- 使用
-like "*关键词*"实现包含式匹配,只要单元格内容里有输入的关键词就会匹配 - 用
.Trim()去掉输入的首尾空格,避免误判
如果想保留正则匹配(支持更复杂的搜索规则),可以用[regex]::Escape($searchKeyword)转义特殊字符后再用-match:
$escapedKeyword = [regex]::Escape($searchKeyword) if ($Row.Cells[0].Value.ToString() -match $escapedKeyword) { # ...匹配逻辑... }
内容的提问来源于stack exchange,提问作者takeshisan
相关产品推荐
相关产品推荐

