VB.NET中ListView筛选问题求助:仅显示匹配搜索记录
VB.NET ListView 筛选显示匹配记录解决方案
你的代码当前仅实现了高亮选中匹配项的功能,要实现隐藏非匹配项、只显示符合条件记录的效果,只需修改逻辑为控制 ListViewItem 的 Visible 属性即可,以下是调整后的完整代码:
Private Sub btnfind_Click(sender As Object, e As EventArgs) Handles btnfind.Click Dim searchRecord As String = txtsearch.Text.Trim() lvRoom.SelectedIndices.Clear() ' 搜索框为空时,显示所有记录 If String.IsNullOrEmpty(searchRecord) Then For Each lvr As ListViewItem In lvRoom.Items lvr.Visible = True Next lvRoom.Focus() Return End If For Each lvr As ListViewItem In lvRoom.Items ' 默认隐藏当前项 lvr.Visible = False ' 遍历子项查找匹配内容 For Each lvrsub As ListViewItem.ListViewSubItem In lvr.SubItems ' 支持不区分大小写匹配,如需严格匹配可去掉 StringComparison 参数 If lvrsub.Text.Equals(searchRecord, StringComparison.OrdinalIgnoreCase) Then lvr.Visible = True lvRoom.SelectedIndices.Add(lvr.Index) ' 可选:同时高亮选中匹配项 Exit For ' 找到匹配后跳出子项循环,提升效率 End If Next Next lvRoom.Focus() End Sub
关键修改说明
- 新增搜索文本为空的处理:清空搜索框时自动恢复显示所有记录
- 将原有的选中逻辑替换为
Visible属性控制:默认隐藏所有项,找到匹配项后再设置为可见 - 加入不区分大小写匹配的选项(可根据需求移除
StringComparison.OrdinalIgnoreCase改为严格匹配) - 保留了选中匹配项的逻辑(可选,不需要的话可删除对应代码行)
内容的提问来源于stack exchange,提问作者Emmanuel Tandema
相关产品推荐
相关产品推荐

