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

VB.NET DataGridView实时搜索功能异常:匹配成功但所有行隐藏

问题原因

你的代码逻辑存在顺序错误:

  • 对同一行的多列进行遍历判断时,即使某一列匹配成功将行设为可见,后续遍历到该行不匹配的其他列时,会再次将行的Visible属性覆盖为False
  • 最终只有整行所有列的内容都完全等于搜索内容的行才会保留可见,绝大多数匹配到单列的行都会被后续判断隐藏,你看到的弹窗只是匹配到某一列时的临时触发,不代表最终行的可见性状态
修复方案

调整判断逻辑:遍历每一行时先默认隐藏该行,只要检测到任意一列匹配就将行设为可见,并终止当前行的剩余列判断,同时补充空值校验避免单元格为空时报错。
修复后的代码如下:

' 提前统一处理搜索内容,避免重复计算
Dim searchText As String = ContactsListSearch.Text.ToLower.Trim()
For i As Integer = 0 To ContactsList.RowCount - 1
    Dim isMatch As Boolean = False
    For j As Integer = 0 To ContactsList.ColumnCount - 1
        ' 先判断单元格非空再做比较,避免空值报错
        If ContactsList.Rows(i).Cells(j).Value IsNot Nothing Then
            Dim cellText As String = ContactsList.Rows(i).Cells(j).Value.ToString.ToLower.Trim()
            If cellText = searchText Then
                isMatch = True
                ' 匹配到就跳出列循环,无需判断当前行剩余列
                Exit For
            End If
        End If
    Next
    ' 统一设置行可见性
    ContactsList.Rows(i).Visible = isMatch
    If isMatch Then
        MsgBox("Item found " + i.ToString())
    End If
Next

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:06:00