【问题标题】:Find item in listview using textbox_changed event VB.Net使用 textbox_changed 事件 VB.Net 在列表视图中查找项目
【发布时间】:2014-11-21 08:33:00
【问题描述】:

我的计划是使用 textbox_changed 事件搜索列表视图中的数据或项目,并消除文本框上不包含字符串的其他项目。但是当我在文本框中插入任何文本时,列表视图中的所有项目都消失或丢失,如果我清除所有文本框列表视图中的项目仍然丢失或没有项目..我在谷歌上搜索,并在谷歌上使用各种代码,但我的问题仍然是一样的。

这就是我将数据插入列表视图的方式:

Private Sub BtnOpenPCostumer_Click(sender As Object, e As EventArgs) Handles BtnOpenPCostumer.Click
    Dim connection As OleDbConnection
    Dim command As OleDbCommand
    Dim data_reader As OleDbDataReader
    connection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & App_Path & "\Costumer\PCostumer\PCostumer.accdb")
    connection.Open()
    command = New OleDbCommand("SELECT * FROM TblPCostumer", connection)
    data_reader = command.ExecuteReader
    If data_reader.HasRows Then
        While data_reader.Read

            Dim newitem As New ListViewItem()
            newitem.Text = data_reader.GetValue(0)
            newitem.SubItems.Add(data_reader.GetValue(1))
            newitem.SubItems.Add(data_reader.GetValue(2))
            newitem.SubItems.Add(data_reader.GetValue(3))
            newitem.SubItems.Add(data_reader.GetValue(4))
            ListView1.Items.Add(newitem)
        End While
    End If
End Sub

这就是我在列表视图中搜索数据的方式。

  Private Sub TxtFindCostumer_TextChanged(sender As Object, e As EventArgs) Handles TxtFindCostumer.TextChanged
    Dim TrueList As New List(Of ListViewItem)
    ListView1.BeginUpdate()
    If TxtFindCostumer.Text.Trim().Length = 0 Then
        ListView1.Items.Clear()
        For Each item In TrueList
            ListView1.Items.Add(item)
        Next
    Else
        ListView1.Items.Clear()
        For Each item In TrueList
            If item.Text.Contains(TxtFindCostumer.Text) Then
                ListView1.Items.Add(item)
            End If
        Next
    End If
    ListView1.EndUpdate()
End Sub

我找到了许多使用此代码的解决方案,其他人使用此代码取得了成功,但对我来说不是……也许我在这里错过了一些东西……对不起我的英语不好……谢谢。

【问题讨论】:

    标签: vb.net winforms listview


    【解决方案1】:

    这一行

    Dim TrueList As New List(Of ListViewItem) 
    

    每次触发 TextChanged 事件时都会创建一个 ListViewItem 的 EMPTY 列表。 List 是空的,所以在调用之后

    ListView1.Items.Clear()
    

    您无法将列表视图的内容设置为有用的内容。

    如果表格的内容不是很大,可以在表单级别移动 TrueList 变量的声明,并在按钮单击事件中填充 ListView 时填充它

    ' At the form level
    Dim TrueList As New List(Of ListViewItem) 
    
    
    .....
    
    Private Sub BtnOpenPCostumer_Click(sender As Object, e As EventArgs) Handles BtnOpenPCostumer.Click
    
        ....
    
        data_reader = command.ExecuteReader
        If data_reader.HasRows Then
            While data_reader.Read
                Dim newitem As New ListViewItem()
                .....
                ' Add the ListViewItem to the ListView.Items collection
                ListView1.Items.Add(newitem)
                ' Add the same ListViewItem to the List(Of ListViewItem) 
                ' used in the TextChanged event to filter the ListView content
                TrueList.Add(newItem)
            End While
        End If
    End Sub
    

    当然去掉TextChanged事件中TrueList的声明和初始化

    【讨论】:

    • 好的,先生,首先,当我将任何文本插入文本框时,我得到指向 TxtFindCostumer_TextChanged Else "ListView1.Items.Add(item)" 的错误点。所以我尝试将“Dim Truelist”更改为“Private” Truelist”.. 现在正在工作,先生,谢谢。
    • 我差点忘了先生..这段代码现在可以工作了..但它只能在第一列找到..我怎样才能从第二列或第三列搜索..
    • 那是一个不同的问题。我建议发布一个包含相关信息的新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多