我从指定的索引中搜索我的listview并返回该单词的第一个结果(项目所在的索引)。它工作得很好,除了我只能搜索列表视图中的第一列。我怎样才能只搜索第二列?
Private Function FindLogic(ByVal LV As ListView, ByVal CIndex As Integer, ByVal SearchFor As String) As Integer
Dim idx As Integer
Dim It = From i In LV.Items Where i.index > CIndex And i.Text = SearchFor
If It.Count > 0 Then
idx = It(0).Index
Else
idx = -1
End If
Return idx
End Function
答案 0 :(得分:1)
您需要访问ListViewItem的ListViewSubItems以获取其他列。使用子项,您将能够通过索引搜索不同的列,而不是仅搜索文本。您只需在循环中使用循环即可执行搜索。如果您愿意,可以明确表示您只想搜索第二列,但通过在循环中使用循环,您实际上可以搜索任何列。这是一个示例:
Dim idx As Integer = -1
For Each lvi As ListViewItem In Me.lvwData.Items
If lvi.SubItems(1).Text = "TextToSearchFor" Then
idx = lvi.Index
End If
Next
答案 1 :(得分:0)
我已经弄清楚了。此解决方案允许您选择指定的索引以开始搜索并检查列和索引为1.(通常是您的第二列)
Private Function FindLogic(ByVal LV As ListView, ByVal CIndex As Integer, ByVal SearchFor As String) As Integer
Dim idx As Integer
Dim It = From i In LV.Items Where i.index > CIndex And i.SubItems(1).Text = SearchFor
If It.Count > 0 Then
idx = It(0).Index
Else
idx = -1
End If
Return idx
End Function
您还可以在函数中添加另一个参数,以便您可以选择不同的列来检查字符串,如下所示:
Private Function FindLogic(ByVal LV As ListView, ByVal CIndex As Integer, ByVal Column As Integer, ByVal SearchFor As String) As Integer
Dim idx As Integer
Dim It = From i In LV.Items Where i.index > CIndex And i.SubItems(Column).Text = SearchFor
If It.Count > 0 Then
idx = It(0).Index
Else
idx = -1
End If
Return idx
End Function
要使用此功能,它将如下所示:
FindLogic(Listview1, 1, 1, "Dog")
你也可以从这样的选定项目中搜索:
FindLogic(Listview1, 1, LV.SelectedIndices(0), "Dog")