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
相关产品推荐
相关产品推荐

