簡體   English   中英

在vb.net中過濾列表視圖

[英]Filter a listview in vb.net

當前,我有一個程序可以寫入具有以下名稱的列的ListViewnumbertime ,description。 這個列表視圖沒有任何數據綁定,我基本上只是使用代碼來寫它。

我想要做的是擁有一個TextBox ,如果用戶想要查看特定的數字(即2),則當他們在文本框中鍵入內容時,我希望listview僅顯示number = 2的數據。文本框,我希望列表視圖顯示所有數據。

我正在互聯網上四處張望,似乎沒有找到過濾方法。 它甚至存在嗎?如果是這樣,我將如何實施它。

感謝所有幫助。

雖然我建議將DataGridViewDataSource一起使用,但是在需要使用ListView情況下,可以使用此解決方案。

您可以通過以下方式過濾列表視圖:

  • 定義一個成員字段作為項目的備份存儲:
  • 在將項目添加到列表視圖后的表單Load ,將每個項目存儲在該成員字段中
  • 將一個TextBoxButton的形式和處理Click的事件Button的處理程序,並首次明確所有項目ListView然后與標准相匹配的備份存儲的每個項目。

備份項目的成員字段

Private ItemsBackup As New List(Of ListViewItem)

在加載項后填寫備用ListView的形式Load事件

For Each item As ListViewItem In ListView1.Items
    ItemsBackup.Add(item)
Next

過濾器代碼

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Me.ListView1.BeginUpdate()

    Me.ListView1.Items.Clear()
    For Each item As ListViewItem In ItemsBackup
        If (item.Text = Me.TextBox1.Text Or String.IsNullOrEmpty(Me.TextBox1.Text)) Then
            Me.ListView1.Items.Add(item)
        End If
    Next

    Me.ListView1.EndUpdate()
End Sub

您還可以將上述代碼用於TextBox TextChanged事件。

這是一個測試數據:

For i = 1 To 30
    Dim item As New ListViewItem(i.ToString())
    item.SubItems.Add(DateTime.Now.AddHours(i))
    Me.ListView1.Items.Add(item)
Next

沒有大量的工作,普通的.NET ListView就無法做到這一點。 因此,您可以使用ObjectListView一個圍繞標准.NET ListView的開源包裝程序-它已經為您完成了所有工作。

它具有內置的過濾功能 (並突出顯示)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM