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

通过TextBox检索已填充ListView仅保留匹配行的VB代码实现问题

问题根因

  • DataTable.Select()方法会返回符合筛选条件的DataRow数组,原有代码没有接收该返回值,依然遍历了dt4的全量原始行,导致筛选不生效
  • 事件中打开的数据库连接全程未使用,属于冗余代码,会造成不必要的资源占用
  • ListView的列配置、视图样式属于固定配置,不需要每次文本变更都重复执行

修正后代码

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    ' 清空现有列表项
    ListView3.Items.Clear()
    
    ' 获取筛选后的行数组
    Dim filterRows As DataRow()
    If String.IsNullOrWhiteSpace(TextBox1.Text) Then
        filterRows = dt4.Select() ' 搜索框为空时返回全部行
    Else
        ' 转义单引号避免语法错误
        Dim searchTxt = TextBox1.Text.Replace("'", "''")
        filterRows = dt4.Select($"ServiceName like '%{searchTxt}%'")
    End If
    
    ' 仅遍历筛选后的行填充列表
    For Each row As DataRow In filterRows
        Dim item As New ListViewItem() With {.Checked = False}
        item.SubItems.Add(row("CPTCode").ToString())
        item.SubItems.Add(row("ServiceName").ToString())
        ListView3.Items.Add(item)
    Next
End Sub

可选优化

可将ListView的固定配置移到窗体Load事件中,减少重复执行的冗余操作:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    With ListView3
        .View = View.Details
        .GridLines = True
        .Columns.Clear()
        .Columns.Add(" ", 30)
        .Columns.Add("CPT Code", 80, HorizontalAlignment.Left)
        .Columns.Add("Service Name", 350, HorizontalAlignment.Left)
    End With
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:15:04