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

