You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.net Advanced DataGridView运行时填充数据后过滤功能失效求助

解决Advanced DataGridView运行时数据过滤失效问题

首先纠正你代码里的拼写错误:obinding.Datasourse应该是obinding.DataSource,这个低级错误会直接导致绑定失败。

接下来,你需要调整绑定逻辑的顺序,确保BindingSource作为Advanced DataGridView(以下简称ADGV)和数据源之间的中间层,正确的流程如下:

1. 确认数据源类型支持过滤

  • 如果是DataTable:天然支持BindingSource的Filter功能,直接使用即可。
  • 如果是自定义对象列表(比如List(Of YourModel)):需要转为BindingList(Of YourModel),普通List不支持Filter。

2. 正确绑定数据源与ADGV

示例1:DataTable作为数据源

' 假设你在运行时生成了DataTable dt
Dim obinding As New BindingSource()
' 先把原始数据源绑定到BindingSource
obinding.DataSource = dt
' 再把BindingSource绑定到ADGV
AdvancedDataGridView1.DataSource = obinding

示例2:自定义对象列表作为数据源

' 假设你的数据是List(Of YourModel) dataList
' 转为支持绑定的BindingList
Dim bindingList As New BindingList(Of YourModel)(dataList)
Dim obinding As New BindingSource()
obinding.DataSource = bindingList
AdvancedDataGridView1.DataSource = obinding

3. 正确应用过滤

当需要触发过滤时(比如在ADGV的过滤事件中),直接将ADGV的FilterString赋值给BindingSource的Filter属性:

' 比如在ADGV的FilterChanged事件中
Private Sub AdvancedDataGridView1_FilterChanged(sender As Object, e As EventArgs) Handles AdvancedDataGridView1.FilterChanged
    Dim bindingSource = TryCast(AdvancedDataGridView1.DataSource, BindingSource)
    If bindingSource IsNot Nothing Then
        bindingSource.Filter = AdvancedDataGridView1.FilterString
    End If
End Sub

常见问题排查

  • 不要从ADGV的DataSource反向赋值给BindingSource:这样会破坏绑定链路,必须让BindingSource先持有原始数据源,再绑定到ADGV。
  • 自定义对象的属性必须是公共可访问的:否则BindingSource无法识别属性,过滤规则会失效。
  • 过滤字符串格式要正确:比如针对字符串类型的列,需要用单引号包裹值(如Name LIKE '%张三%')。

内容的提问来源于stack exchange,提问作者User1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:10:06