Blazor环境下Radzen DataGrid非可见列OData自定义过滤实现咨询
Radzen DataGrid 自定义OData筛选实现方案
完全可以实现你需要的自定义筛选需求,具体实现步骤如下:
- 第一步:在页面中定义自定义筛选参数的绑定变量,以及Radzen DataGrid的组件引用
// 自定义筛选参数,和筛选区的输入控件绑定 private string? FilterHiddenField1 { get; set; } private int? FilterHiddenField2 { get; set; } // Radzen DataGrid 组件引用 private RadzenDataGrid<YourBusinessDataType>? DataGridRef;
- 第二步:自定义网格的
LoadData事件处理逻辑,这是拼接自定义OData筛选条件的核心环节
private async Task OnGridLoadData(LoadDataArgs args) { // 先获取Radzen内置生成的排序、分页、内置列过滤参数 var query = odataContext.YourBusinessDataSet .OrderBy(args.OrderBy) .Skip(args.Skip ?? 0) .Take(args.Top ?? 20); // 追加自定义筛选条件,支持未在网格中展示的字段 if (!string.IsNullOrEmpty(FilterHiddenField1)) { query = query.Where(x => x.HiddenField1.Contains(FilterHiddenField1)); } if (FilterHiddenField2.HasValue) { query = query.Where(x => x.HiddenField2 == FilterHiddenField2.Value); } // 执行OData查询,获取数据和总条数 var data = await query.ToListAsync(); var total = await query.CountAsync(); // 绑定数据到网格 DataGridRef.Data = data; DataGridRef.TotalItems = total; }
- 第三步:给搜索按钮绑定点击事件,点击时触发网格重新加载
private async Task OnSearchButtonClick() { // 调用Reload方法会重新触发LoadData事件,自动携带最新的自定义筛选参数 await DataGridRef.Reload(); }
- Razor页面组件绑定示例
<!-- 自定义筛选区域 --> <RadzenTextBox @bind-Value="FilterHiddenField1" Placeholder="筛选隐藏字段1" /> <RadzenNumeric @bind-Value="FilterHiddenField2" Placeholder="筛选隐藏字段2" /> <RadzenButton Text="搜索" Click="@OnSearchButtonClick" /> <!-- Radzen DataGrid 配置 --> <RadzenDataGrid TItem="YourBusinessDataType" @ref="DataGridRef" LoadData="@OnGridLoadData" AllowPaging="true" AllowFiltering="true"> <Columns> <!-- 仅配置需要展示的列即可,不需要展示的筛选字段不用在这里声明 --> <RadzenDataGridColumn TItem="YourBusinessDataType" Property="VisibleField1" Title="可见列1" /> <RadzenDataGridColumn TItem="YourBusinessDataType" Property="VisibleField2" Title="可见列2" /> </Columns> </RadzenDataGrid>
如果你使用Radzen官方封装的OData服务扩展来获取数据,也可以直接在对应服务的查询方法中传入自定义的
Filter字符串参数,自定义筛选逻辑会和网格内置的筛选条件自动合并生效。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

