Vincenzo Rossi的DataGridView-Filter-Popup-Extensions多选筛选不生效咨询
DgvMultiCheckBoxColumnFilter 筛选不生效解决方案
以下是针对你遇到的多选过滤器配置后不生效问题的修复方案:
核心问题原因
- 代码存在重复配置过滤器的冲突:你同时通过
ColumnFilterAdding事件和手动显式赋值两种方式为OrderID列设置多选过滤器,重复初始化会导致过滤器的筛选表达式绑定逻辑异常 - 数据源绑定与过滤器管理器初始化顺序错误:你先给DataGridView绑定数据源,再给过滤器管理器关联DataGridView,会导致列属性未被过滤器正确识别
- 数值类型列适配问题:你SQL中把OrderID强转为INT类型,部分版本的多选过滤器默认按字符串逻辑生成筛选表达式,类型不匹配导致筛选失效
修复步骤
- 删除重复的过滤器赋值代码,仅保留
ColumnFilterAdding事件中的配置即可 - 调整初始化顺序:先给过滤器管理器关联DataGridView,再绑定DataGridView的数据源
- 为数值类型的列指定过滤器的表达式适配逻辑,确保生成的筛选条件符合数值类型匹配规则
修正后示例代码
Dim strSQL2 As String = "SELECT DISTINCT CAST(OrderID AS INT) AS OrderID FROM taSalesData" Dim dt2 As New DataTable Dim clssqldata As New clsSqlData dt2 = clssqldata.sqlFillDataTable(strSQL2, 1) ' 先初始化过滤器管理器并关联DataGridView Dim filterManager2 As New DgvFilterManager() AddHandler filterManager2.ColumnFilterAdding, AddressOf fm_ColumnFilterAdding2 filterManager2.DataGridView = DataGridView2 ' 再绑定数据源 DataGridView2.DataSource = dt2 Private Sub fm_ColumnFilterAdding2(ByVal sender As Object, ByVal e As ColumnFilterEventArgs) Select Case e.Column.Name Case "OrderID" Dim filter As New DgvMultiCheckBoxColumnFilter() ' 针对数值类型列设置表达式生成格式,避免字符串匹配逻辑 filter.FilterExpressionFormat = "[{0}] = {1}" e.ColumnFilter = filter End Select End Sub
内容的提问来源于stack exchange,提问作者Gerhard
相关产品推荐
相关产品推荐

