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

MudDataGrid无法过滤Version类型列的技术求助

解决MudBlazor DataGrid中Version类型列无法过滤的问题

MudBlazor默认未为Version类型提供内置过滤操作符与模板,需通过自定义过滤模板和逻辑实现版本号列的过滤功能,具体步骤如下:

1. 为Version列添加自定义过滤模板

在目标PropertyColumn中定义FilterTemplate,提供版本号输入框及可选的操作符选择器,满足不同过滤需求。

2. 实现自定义过滤逻辑

通过FilterFunc属性编写过滤逻辑,将用户输入的字符串解析为Version对象,再与数据中的版本号进行对比。

完整代码示例

// 示例模型类
public class AppInfo
{
    public int Id { get; set; }
    public string AppName { get; set; }
    public Version AppVersion { get; set; }
}
<MudDataGrid T="AppInfo" Items="@appList" Filterable="true" Height="400px">
    <Columns>
        <PropertyColumn Property="x => x.Id" Title="ID" />
        <PropertyColumn Property="x => x.AppName" Title="应用名称" />
        <PropertyColumn Property="x => x.AppVersion" Title="版本号">
            <!-- 自定义过滤模板:操作符选择 + 版本号输入 -->
            <FilterTemplate>
                <MudStack Direction="Direction.Row" Spacing="2">
                    <MudSelect @bind-Value="@selectedOperator" Variant="Variant.Outlined" Width="100px">
                        <MudSelectItem Value="FilterOperator.Equals">等于</MudSelectItem>
                        <MudSelectItem Value="FilterOperator.GreaterThan">大于</MudSelectItem>
                        <MudSelectItem Value="FilterOperator.LessThan">小于</MudSelectItem>
                    </MudSelect>
                    <MudTextField @bind-Value="@filterVersion" Placeholder="如3.19.4.2" Variant="Variant.Outlined" />
                </MudStack>
            </FilterTemplate>
            <!-- 自定义过滤逻辑 -->
            <FilterFunc>
                @((item, state) =>
                {
                    if (string.IsNullOrEmpty(filterVersion))
                        return true;
                    // 解析用户输入的版本号,避免无效输入报错
                    if (!Version.TryParse(filterVersion, out var inputVersion))
                        return false;
                    
                    // 根据选择的操作符执行版本号对比
                    var compareResult = item.AppVersion.CompareTo(inputVersion);
                    return selectedOperator switch
                    {
                        FilterOperator.Equals => compareResult == 0,
                        FilterOperator.GreaterThan => compareResult > 0,
                        FilterOperator.LessThan => compareResult < 0,
                        _ => true
                    };
                })
            </FilterFunc>
        </PropertyColumn>
    </Columns>
</MudDataGrid>

@code {
    private List<AppInfo> appList = new()
    {
        new AppInfo { Id = 1, AppName = "办公系统", AppVersion = new Version("3.19.4.2") },
        new AppInfo { Id = 2, AppName = "客户管理系统", AppVersion = new Version("4.0.1.0") },
        new AppInfo { Id = 3, AppName = "数据分析工具", AppVersion = new Version("3.18.5.1") }
    };

    private string filterVersion;
    private FilterOperator selectedOperator = FilterOperator.Equals;

    // 自定义过滤操作符枚举,可按需扩展
    public enum FilterOperator
    {
        Equals,
        GreaterThan,
        LessThan
    }
}

关键说明

  • 用Version.TryParse处理用户输入,避免无效版本号引发异常
  • 借助.NET内置的Version.CompareTo方法实现版本号的正确对比,该方法会自动处理多段版本号的层级比较
  • 若需更复杂的过滤规则(如匹配某一段版本号),可修改FilterFunc逻辑,拆分版本号段进行匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:00:03