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

VB.NET中双击DataGridView出现类过滤效果问题排查(Kimtoo.Bindingprovider)

排查VB.NET中Kimtoo.BindingProvider绑定DataGridView双击后数据异常问题

使用Kimtoo.BindingProvider NuGet包实现DataGridView数据绑定,双击DataGridView后控件仅显示部分数据(类似过滤状态),而非全部数据,怀疑代码存在问题。

相关代码

Private record As TEST
Private Sub LoadData()
        Try
            Dim data As List(Of TEST) = Con.Query(Of TEST)("Select * From TEST").ToList()
             DataGridView1.Bind(data)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
Private Sub DataGridView1_DoubleClick(sender As Object, e As EventArgs) Handles DataGridView1.DoubleClick
        Me.record = DirectCast(DataGridView1.CurrentRow.Tag, TEST)
        BindingProvider1.Bind(record)
        LoadData()
    End Sub

现象描述

  • 双击前:DataGridView显示完整的TEST表数据集
  • 双击后:DataGridView仅显示少量数据,呈现类似过滤后的状态

问题原因分析

DoubleClick事件中先将单个TEST对象绑定到BindingProvider1,再调用LoadData重新绑定全量数据。Kimtoo.BindingProvider的绑定机制可能存在上下文共享问题:绑定单个对象后,DataGridView的绑定源被意外关联到该单个对象的上下文,导致后续全量数据绑定被过滤,仅显示与该对象匹配的数据。

解决方案

  1. 调整事件执行顺序
    先刷新全量数据绑定,再绑定单个记录,避免上下文干扰:
Private Sub DataGridView1_DoubleClick(sender As Object, e As EventArgs) Handles DataGridView1.DoubleClick
    Me.record = DirectCast(DataGridView1.CurrentRow.Tag, TEST)
    LoadData() ' 优先刷新全量数据
    BindingProvider1.Bind(record) ' 再绑定单个记录
End Sub
  1. 确保数据源独立性
    在LoadData中创建全新的List实例,避免复用可能被污染的数据源上下文:
Private Sub LoadData()
    Try
        Dim data As New List(Of TEST)(Con.Query(Of TEST)("Select * From TEST"))
        DataGridView1.Bind(data)
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub
  1. 验证Row.Tag赋值正确性
    确认DataGridView绑定数据时,每行的Tag属性已正确赋值为对应的TEST对象,避免DirectCast返回空值引发异常绑定状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:01:03