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

ASPxGridView非绑定列下拉筛选时如何启用BeginsWith过滤规则?

搞定ASPxGridView非绑定列下拉筛选用BeginsWith的问题

嘿,我太懂你这个痛点了——明明设置了Settings.AutoFilterCondition="BeginsWith"让输入框筛选生效,但下拉选值的时候还是精确匹配,完全不是想要的效果。我之前做项目的时候也踩过这个坑,给你两个亲测有效的解决方案,按需选就行:

方案1:服务器端事件改筛选规则(稳扎稳打型)

用ProcessColumnAutoFilter事件,在筛选条件真正应用前,手动把下拉选择的规则换成BeginsWith。

C#后台代码

protected void ASPxGridView1_ProcessColumnAutoFilter(object sender, DevExpress.Web.ASPxGridViewAutoFilterEventArgs e)
{
    // 先定位到你的目标非绑定列,把"UnboundColumn"换成你实际的列名
    if (e.Column.FieldName == "UnboundColumn" && e.Kind == DevExpress.Web.GridViewAutoFilterEventKind.CreateCriteria)
    {
        // 当用户从下拉选了值时,替换筛选规则
        if (!string.IsNullOrEmpty(e.Value))
        {
            // 构造BeginsWith的筛选条件,用LIKE + 通配符%
            e.Criteria = DevExpress.Data.Filtering.CriteriaOperator.Parse("[UnboundColumn] LIKE ?", e.Value + "%");
            // 告诉系统我们已经处理过了,别用默认逻辑
            e.Handled = true;
        }
    }
}

然后在ASPX页面的GridView里绑定这个事件:

<dx:ASPxGridView ID="ASPxGridView1" runat="server" OnProcessColumnAutoFilter="ASPxGridView1_ProcessColumnAutoFilter">
    <!-- 你的其他GridView配置 -->
    <Columns>
        <dx:GridViewDataTextColumn FieldName="UnboundColumn" UnboundType="String">
            <Settings AutoFilterCondition="BeginsWith" />
            <!-- 这里放你的下拉筛选选项 -->
            <SettingsAutoFilter>
                <Items>
                    <dx:ListEditItem Text="值1" Value="值1" />
                    <dx:ListEditItem Text="值2" Value="值2" />
                </Items>
            </SettingsAutoFilter>
        </dx:GridViewDataTextColumn>
    </Columns>
</dx:ASPxGridView>

方案2:客户端事件自定义筛选(响应更快型)

如果不想走服务器端,纯客户端处理也可以,用AutoFilterEditorCreated事件给下拉框绑定选择事件,手动构造BeginsWith的筛选条件。

ASPX页面代码

<dx:ASPxGridView ID="ASPxGridView1" runat="server" ClientInstanceName="grid">
    <!-- 其他配置 -->
    <Columns>
        <dx:GridViewDataTextColumn FieldName="UnboundColumn" UnboundType="String">
            <Settings AutoFilterCondition="BeginsWith" />
            <SettingsAutoFilter>
                <Items>
                    <dx:ListEditItem Text="值A" Value="值A" />
                    <dx:ListEditItem Text="值B" Value="值B" />
                </Items>
            </SettingsAutoFilter>
        </dx:GridViewDataTextColumn>
    </Columns>
    <ClientSideEvents AutoFilterEditorCreated="function(s, e) {
        // 找到目标列
        if (e.column.fieldName === 'UnboundColumn') {
            var editor = e.editor;
            // 确认是下拉框编辑器
            if (editor instanceof ASPxComboBox) {
                // 绑定选择事件
                editor.SelectedIndexChanged.AddHandler(function(edt, args) {
                    var selectedVal = edt.GetValue();
                    if (selectedVal) {
                        // 手动设置BeginsWith筛选
                        grid.AutoFilterByColumn('UnboundColumn', selectedVal + '%', 'BeginsWith');
                    } else {
                        // 清空筛选
                        grid.AutoFilterByColumn('UnboundColumn', '', '');
                    }
                });
            }
        }
    }" />
</dx:ASPxGridView>

小提醒

  • 别忘了你的是非绑定列,得确保CustomUnboundColumnData事件里正确给列赋值,不然筛选会找不到对应数据。
  • 方案1适合需要复杂逻辑或者依赖服务器数据的场景,方案2响应更快,适合固定下拉选项的简单场景。

选一个试试,应该就能实现你要的下拉选值用BeginsWith筛选的效果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:34:39