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

如何保存RadzenGrid调整后的列宽并在切换分页后保持生效

解决方案

你遇到的两个问题根源一致:RadzenGrid默认的列宽调整仅作用于当前渲染的DOM节点,切换分页时网格会重新渲染,未被持久化的列宽配置就会重置,同时也不会跨分页生效,按以下步骤修改即可解决:

1. 定义列宽存储容器

在页面的@code块中新增字典用于存储各列的宽度配置,键用列的Property属性作为唯一标识:

// 存储列宽,key为列的Property值,value为宽度值
private Dictionary<string, string> _columnWidths = new();

2. 绑定列宽调整事件与列宽属性

给RadzenGrid新增ColumnResized事件监听,同时将所有RadzenGridColumn的Width属性绑定到你定义的字典上:

<RadzenGrid 
    AllowPaging="true" 
    AllowSorting="true" 
    AllowColumnResize="true" 
    Data="@Data" 
    TItem="ArticleVariantListModel"
    RowSelect="@SelectRow"
    ColumnResized="@OnColumnResized"> <!-- 新增列宽调整事件 -->
    <Columns>
        <RadzenGridColumn TItem="ArticleVariantListModel" Property="Id" Title="Id" 
            Width="@(_columnWidths.TryGetValue("Id", out var w) ? w : "70px")" />
        <RadzenGridColumn TItem="ArticleVariantListModel" Property="Name" Title="@Language.Name" 
            Width="@(_columnWidths.TryGetValue("Name", out var w1) ? w1 : "auto")" />
        <RadzenGridColumn TItem="ArticleVariantListModel" Property="Index" Title="@Language.Index" 
            Width="@(_columnWidths.TryGetValue("Index", out var w2) ? w2 : "auto")" />
        <!-- 其余所有列都按照以上规则绑定Width属性,默认值填你原来设置的宽度即可 -->
    </Columns>
</RadzenGrid>

3. 实现列宽调整事件处理方法

在@code块中实现OnColumnResized方法,将用户调整后的宽度存入字典:

private void OnColumnResized(ColumnResizeEventArgs<ArticleVariantListModel> args)
{
    var columnProp = args.Column.Property;
    if (string.IsNullOrEmpty(columnProp)) return;
    // 保存调整后的宽度
    _columnWidths[columnProp] = $"{args.Width}px";

    // 如果需要实现用户下次打开页面仍保留调整后的列宽,可在此处将_columnWidths序列化后存入浏览器localStorage
    // 页面初始化时OnInitializedAsync方法中读取localStorage中的配置反序列化到_columnWidths即可
}

修改完成后,列宽会存储在组件的状态中,切换分页时网格重新渲染会读取字典中存储的宽度值,既可以保证所有分页的列宽一致,也不会出现切页后列宽重置的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:24:07