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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 23:42:41