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

MudBlazor Data Grid持久化状态后排序序号不显示问题求助

解决MudBlazor DataGrid恢复状态后排序序号丢失的问题

问题根源:你通过SortDefinitionsBind字典中转排序定义,但字典是无序集合,会丢失SortDefinitions原本的优先级顺序。而MudBlazor的排序序号是根据SortDefinitions列表的先后顺序生成的,顺序错乱后序号自然无法正常显示。

修复方案

  1. 移除GridState<T>中的SortDefinitionsBind字典属性,直接用SortDefinitions列表绑定DataGrid
  2. 保存/恢复状态时直接操作SortDefinitions列表,保证顺序不变

修改后的代码

GridState类

public class GridState<T> 
{   
    public int Page { get; set; } = 0;   
    public int PageSize { get; set; } = 10;   
    public string? SearchText { get; set; }    
    public ICollection<SortDefinition<T>>? SortDefinitions { get; set; } = new List<SortDefinition<T>>();   
    public ICollection<IFilterDefinition<T>>? FilterDefinitions { get; set; }  
    public HashSet<T> SelectedItems { get; set; } = new();    
}

MudDataGrid组件绑定

<MudDataGrid T="Model"           
@ref="_grid"           
LoadingProgressColor="Color.Primary"
Virtualize="false"       
ServerData="ServerDataFunc"           
RowClick="HandleRowDoubleClick" 
MultiSelection="true"  
CurrentPage="GridStateService.State.Page"
RowsPerPage="GridStateService.State.PageSize"           
Filterable="true"
SortDefinitions="@GridStateService.State.SortDefinitions" 
@bind-SelectedItems="SelectedModel">

补充说明

如果之前用字典是为了过滤SortBy为空的无效排序项,可在保存状态时提前处理:

// 保存状态前过滤无效项
GridStateService.State.SortDefinitions = _grid.SortDefinitions
    .Where(x => !string.IsNullOrWhiteSpace(x.SortBy))
    .ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:32:34