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

MudBlazor MudDataGrid如何设置不区分大小写的筛选?

解决MudDataGrid字符串筛选区分大小写的问题

目前MudBlazor的MudDataGrid默认字符串筛选是区分大小写的,暂时没有内置属性直接切换为不区分大小写,但可以通过以下两种方式实现需求:

1. 单个列自定义筛选模板(适合局部需求)

针对需要不区分大小写筛选的列,通过FilterTemplate自定义筛选逻辑,替换默认的匹配规则:

<MudDataGrid Items="@links.Result" Dense="true" Elevation="10" Filterable="true" FilterMode="DataGridFilterMode.ColumnFilterMenu">
    <Columns>
        <!-- 其他列保持不变 -->
        <Column T="LinkForGrid" Title="Link Title" Field="LinkText">
            <CellTemplate>
                <MudLink Href="@context.Item.LinkURL" target="@(context.Item.OpenInNewWindow ? "_blank" : "_self")">@context.Item.LinkText</MudLink>
            </CellTemplate>
            <FilterTemplate>
                <MudTextField @bind-Value="@context.FilterValue" Placeholder="Search..." Immediate="true"></MudTextField>
                <input type="hidden" @bind="context.FilterFunc" />
                @{
                    // 自定义不区分大小写的筛选逻辑
                    context.FilterFunc = item => string.IsNullOrEmpty(context.FilterValue) 
                        ? true 
                        : item.LinkText.IndexOf(context.FilterValue, StringComparison.OrdinalIgnoreCase) >= 0;
                }
            </FilterTemplate>
        </Column>
        <!-- 其他列保持不变 -->
    </Columns>
</MudDataGrid>

这里通过手动设置FilterFunc,使用IndexOf配合StringComparison.OrdinalIgnoreCase实现不区分大小写的匹配,同时保留默认的筛选输入框样式。

2. 全局自定义筛选提供器(适合多个网格统一需求)

如果多个MudDataGrid都需要不区分大小写的字符串筛选,可以创建自定义的FilterProvider,覆盖默认的字符串筛选逻辑:

第一步:创建自定义筛选提供器

using MudBlazor;
using System.Reflection;

public class CaseInsensitiveStringFilterProvider : DefaultFilterProvider
{
    public override Func<T, bool> CreateFilter<T>(FilterDefinition filterDefinition)
    {
        // 仅处理字符串类型的筛选
        if (filterDefinition.FieldType == typeof(string) && !string.IsNullOrEmpty(filterDefinition.FilterValue))
        {
            var lowerFilterValue = filterDefinition.FilterValue.ToLowerInvariant();
            return item =>
            {
                // 获取当前列的属性值并转为小写
                var propValue = typeof(T).GetProperty(filterDefinition.Field)?
                    .GetValue(item)?
                    .ToString()?
                    .ToLowerInvariant();
                
                return propValue?.Contains(lowerFilterValue) ?? false;
            };
        }
        // 非字符串类型沿用默认筛选逻辑
        return base.CreateFilter<T>(filterDefinition);
    }
}

第二步:在MudDataGrid中使用该提供器

<MudDataGrid 
    Items="@links.Result" 
    Dense="true" 
    Elevation="10" 
    Filterable="true" 
    FilterMode="DataGridFilterMode.ColumnFilterMenu"
    FilterProvider="@new CaseInsensitiveStringFilterProvider()">
    <!-- 列定义保持不变 -->
</MudDataGrid>

这种方式会自动对所有字符串列应用不区分大小写的筛选,无需逐个列配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:36:23