首页 > 解决方案 > DataTable RowFilter 正在取消选中 CheckedListBox 中的复选框

问题描述

我在文本框上设置了搜索功能。当文本输入到框中时,checkedlistbox 可见项被过滤。当您选中其中一个可见框,然后删除搜索文本时,选中的项目将失去其选中。有没有办法解决?

搜索框:

Private Sub txtSearchBidder_TextChanged(sender As Object, e As EventArgs) Handles txtSearchBidder.TextChanged
    If Not String.IsNullOrWhiteSpace(txtSearchBidder.Text) Then
        dtBidder.DefaultView.RowFilter = "Bidders LIKE '%" & txtSearchBidder.Text & "%'"
    End If
End Sub

选中列表框:

Dim dtBidder as new DataTable
dtBidder.Columns.Add("Bidders")
For Each bidder As String In cmd1.Parameters("@Bidders").Value.ToString().Split(",")
    dtBidder.Rows.Add(bidder)
Next
Dim source1 As New BindingSource()
source1.DataSource = dtBidder

chkListBidders.BindingContext = New BindingContext()
chkListBidders.DataSource = source1
chkListBidders.DisplayMember = "Bidders"
chkListBidders.ValueMember = "Bidders"

标签: vb.netsearchtextboxcheckedlistbox

解决方案


如建议的那样,控件或绑定中没有任何内容可以为您执行此操作,因此您需要自己做,例如

Dim checkedItems = CheckedListBox1.CheckedItems.Cast(Of DataRowView)().ToArray()

'Perform filtering here.

For i = 0 To CheckedListBox1.Items.Count - 1
    CheckedListBox1.SetItemChecked(i, checkedItems.Contains(DirectCast(CheckedListBox1.Items(i), DataRowView)))
Next

推荐阅读