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

使用jQuery Select2多选下拉框实现GridView多条件筛选的代码问题

多Select2下拉框筛选GridView的代码修复方案

问题根因

你当前的拼接逻辑只给第一个筛选条件加了WHERE关键字,如果用户未选中第一个下拉框(客户名称)的选项,只选中第二个下拉框(账号)的选项,最终拼接的SQL会出现表名后直接接AND的语法错误,导致查询失败。同时还存在空值未过滤的问题,隐藏域为空时拆分出来的空字符串会生成无效的查询条件。

修复后的代码

只需要修改OnSearch方法即可,代码如下:

Protected Sub OnSearch(ByVal sender As Object, ByVal e As EventArgs)
    Dim query As String = " SELECT distinct([CUSTOMER_NAME_CMT]),[Acc Number] FROM dbo.MASTERDATA_PRO"
    ' 用列表存储所有生效的筛选条件
    Dim conditions As New List(Of String)()

    ' 处理客户名称筛选条件
    If Not String.IsNullOrWhiteSpace(hfSelected.Value) Then
        Dim customerItems = hfSelected.Value.Split(","c).Where(Function(s) Not String.IsNullOrWhiteSpace(s)).ToList()
        If customerItems.Any() Then
            Dim customerCondition = String.Join(",", customerItems.Select(Function(s) $"'{s.Replace("'", "''")}'"))
            conditions.Add($" CUSTOMER_NAME_CMT IN ({customerCondition}) ")
        End If
    End If

    ' 处理账号筛选条件
    If Not String.IsNullOrWhiteSpace(hfSelected_ACCNO.Value) Then
        Dim accItems = hfSelected_ACCNO.Value.Split(","c).Where(Function(s) Not String.IsNullOrWhiteSpace(s)).ToList()
        If accItems.Any() Then
            Dim accCondition = String.Join(",", accItems.Select(Function(s) $"'{s.Replace("'", "''")}'"))
            conditions.Add($" [Acc Number] IN ({accCondition}) ")
        End If
    End If

    ' 统一拼接WHERE条件
    If conditions.Any() Then
        query &= " WHERE " & String.Join(" AND ", conditions)
    End If

    GridView1.DataSource = GetData(query)
    GridView1.DataBind()
End Sub

逻辑说明

  • 请确保前端第二个Select2下拉框的选中值已经按照第一个下拉的逻辑,正确同步到hfSelected_ACCNO隐藏域中
  • 先把所有生效的筛选条件都存入List集合,不需要单独处理每个条件的前缀关键字
  • 过滤了隐藏域为空、拆分后出现空字符串的异常场景
  • 加了单引号转义逻辑,避免用户输入的内容带单引号导致SQL语法错误
  • 最后统一判断是否有筛选条件,有就拼接WHERE,再把所有条件用AND拼接,完全避免语法错误

优化建议

当前拼接SQL字符串的方式存在SQL注入风险,生产环境建议改成参数化查询,把IN子句的每个值都作为参数传入,不要直接拼接用户输入的内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:36:03