人
我正在为一所学校项目工作,我正试图找出解决ListView中条目过滤/搜索问题的最佳方法。
我目前有一个名为lvCard
的ListView控件(在从FormLoad上的JSON文件填充后需要进行过滤时)包含大约15000个条目。它是一个多列ListView(详细信息视图),它基本上包含了每张Magic the Gathering卡。
我还有一个名为txtSearch
的搜索框。
据我所知,基本上,我需要将某些功能附加到"更改"搜索框的事件,但在那之后,我有点迷失。
目前,我所拥有的是我编写的一个子程序,它在应用程序启动时填充目标ListView,我想这提供了一些关于如何设置目标ListView的见解,但除此之外,我还是真的很困惑,可以肯定地使用一些指导。
' Render the whole list of stuff
Private Sub RenderList(dict As Dictionary(Of String, Card))
' Grab keys into list for sorting
Dim lstCards As List(Of String) = dict.Keys.ToList
lstCards.Sort()
' iteration
Dim str As String
For Each str In lstCards
Dim CurrentCard As Card = dict(str)
Dim CurrentPT As String
If IsNumeric(CurrentCard.power) And IsNumeric(CurrentCard.toughness) Then
CurrentPT = CurrentCard.power & "/" & CurrentCard.toughness
Else
CurrentPT = ""
End If
' Build list item
Dim CurrentItem As New ListViewItem(CurrentCard.name)
CurrentItem.SubItems.Add(CurrentCard.manaCost)
CurrentItem.SubItems.Add(CurrentCard.type)
CurrentItem.SubItems.Add(CurrentPT)
lvCard.Items.Add(CurrentItem)
Next
End Sub
答案 0 :(得分:0)
我不知道这是否有效,因为我目前无法测试它,而且我不知道这是最有效的方法,但你可以添加另一个{{ 1}}到您的ByVal
子,然后将搜索项传递给它,如下所示:
RenderList
然后将Private Sub RenderList(ByVal dict As Dictionary(Of String, Card), ByVal Optional search As String = Nothing)
If search Is Not Nothing Then
'Grab SEARCHED keys into list for sorting
'Populate the initial list first
Dim lstCards As List(Of String) = dict.Keys.ToList
'Create a new list to contain all found items
Dim newLst As List(Of String)
For Each item As String In lstCards
If item.ToLower.Contains(search.ToLower) Then
newLst.Add(item)
End If
Next
'Set lstCards to the new list of items
lstCards = newLst
lstCards.Sort()
Else
'Grab ALL keys into list for sorting
Dim lstCards As List(Of String) = dict.Keys.ToList
lstCards.Sort()
End If
/.../
End Sub
用于您的RenderList(mycards, TextBox1.Text)
活动。