【问题标题】:DataTable RowFilter is unchecking checkboxes in CheckedListBoxDataTable RowFilter 正在取消选中 CheckedListBox 中的复选框
【发布时间】:2019-09-05 19:00:31
【问题描述】:

我在文本框上设置了搜索功能。当文本输入到框中时,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"

【问题讨论】:

  • CheckedListBox 不支持数据绑定(这就是它试图隐藏它的原因)。您必须保留一个单独的已检查项目列表,并在过滤后将它们重新应用到列表中。
  • 您不应设置DefaultViewRowFilter。你有一个BindingSource,所以使用它。将其设置为 Filter 属性。另外,在设计器中添加BindingSource,而不是在代码中。

标签: vb.net search textbox checkedlistbox


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2017-07-22
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    相关资源
    最近更新 更多