MudBlazor DataGrid TemplateColumn的FilterOperators属性使用疑问
MudBlazor 8.7.0 MudDataGrid TemplateColumn 筛选配置指南
先解决核心问题:全局筛选开关
你当前的MudDataGrid设置了Filterable="false",这会全局禁用所有列的筛选功能,哪怕列本身设了Filterable="true"也没用。第一步必须把Grid的Filterable改成true。
TemplateColumn 筛选的正确配置方式
TemplateColumn不像PropertyColumn能自动绑定属性并推断筛选逻辑,所以需要手动指定三个关键部分:
FilterOperators:指定可用的筛选操作符(必须是HashSet<FilterOperator>类型)FilterFunc:自定义筛选逻辑,告诉Grid如何根据输入值过滤数据- 确保列的
Filterable="true"
1. 后台代码定义筛选操作符集合
在组件的@code块或对应的.cs文件中,声明针对字符串类型的筛选操作符集合:
private HashSet<FilterOperator> _stringFilterOperators = new() { FilterOperator.Contains, FilterOperator.Equals, FilterOperator.StartsWith, FilterOperator.EndsWith };
2. 修改前台TemplateColumn配置
把你的TemplateColumn更新为:
<TemplateColumn Title="Omschrijving" SortBy="@((tblRecepten x) => x.ReceptOmschrijving)" FilterOperators="@_stringFilterOperators" Filterable="true" ShowColumnOptions="false" Sortable="true" HeaderClass="gna-table-header" FilterFunc="@((item, filterValue) => item.ReceptOmschrijving.Contains(filterValue.ToString(), StringComparison.OrdinalIgnoreCase))"> <CellTemplate> <div style="width:100%" @ondblclick="args => HandleRowDoubleClick(context.Item)"> @context.Item.ReceptOmschrijving </div> </CellTemplate> </TemplateColumn>
3. 关键说明
FilterOperators必须绑定HashSet<FilterOperator>类型的变量,不能直接写Filteroperator.String(这是PropertyColumn内部使用的预设集合标识,TemplateColumn不支持)FilterFunc是必须的:因为TemplateColumn没有绑定具体Property,Grid不知道要筛选哪个字段,所以需要你手动实现筛选逻辑,这里我们针对ReceptOmschrijving字段做包含匹配,并且忽略大小写- 如果需要其他类型的筛选(比如数字、日期),只需要修改
_stringFilterOperators为对应类型的操作符,同时调整FilterFunc的逻辑
完整修改后的Grid代码示例
<MudDataGrid T="tblRecepten" Items="alleRecepten" Dense="true" Hover="true" Striped="true" Bordered="true" Hideable="false" Filterable="true" <!-- 这里改为true --> Elevation="0" Height="100%" tabindex="0" @onkeydown="HandleGridKeyDown" Virtualize="true" FixedHeader="true" SelectedItem="SelectedRecept" SelectedItemChanged="OnReceptSelectieVeranderen" FilterCaseSensitivity="DataGridFilterCaseSensitivity.CaseInsensitive" RowClassFunc="GetRowClass"> <Columns> <TemplateColumn Title="Omschrijving" SortBy="@((tblRecepten x) => x.ReceptOmschrijving)" FilterOperators="@_stringFilterOperators" Filterable="true" ShowColumnOptions="false" Sortable="true" HeaderClass="gna-table-header" FilterFunc="@((item, filterValue) => item.ReceptOmschrijving.Contains(filterValue.ToString(), StringComparison.OrdinalIgnoreCase))"> <CellTemplate> <div style="width:100%" @ondblclick="args => HandleRowDoubleClick(context.Item)"> @context.Item.ReceptOmschrijving </div> </CellTemplate> </TemplateColumn> </Columns> </MudDataGrid> @code { private HashSet<FilterOperator> _stringFilterOperators = new() { FilterOperator.Contains, FilterOperator.Equals, FilterOperator.StartsWith, FilterOperator.EndsWith }; // 其他现有代码... }
内容的提问来源于stack exchange,提问作者ernie
相关产品推荐
相关产品推荐

