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

Radzen Blazor动态DataGrid分组页脚聚合实现问题

解决Blazor Radzen DataGrid动态列分组页脚聚合问题

核心问题分析

由于数据以IDictionary<string, object>存储,直接使用Sum()无法识别动态列的数值类型,需要先将字典中的object值转换为可计算的数值类型,再进行聚合统计。

实现步骤与代码示例

1. 定义基础数据与列配置

在组件代码中,先声明测试数据、列名列表,以及需要聚合的列名列表:

@code {
    private RadzenDataGrid<IDictionary<string, object>> grid;
    private IEnumerable<IDictionary<string, object>> data;
    // 所有列名
    private string[] columns = new[] { "Category", "Product", "Amount", "Quantity" };
    // 需要分组统计的列
    private string[] aggregateColumns = new[] { "Amount", "Quantity" };

    protected override void OnInitialized()
    {
        // 模拟业务数据
        data = new List<IDictionary<string, object>>
        {
            new Dictionary<string, object> { ["Category"] = "电子", ["Product"] = "手机", ["Amount"] = 2999.99m, ["Quantity"] = 2 },
            new Dictionary<string, object> { ["Category"] = "电子", ["Product"] = "平板", ["Amount"] = 1999.99m, ["Quantity"] = 3 },
            new Dictionary<string, object> { ["Category"] = "家电", ["Product"] = "冰箱", ["Amount"] = 3999.99m, ["Quantity"] = 1 },
            new Dictionary<string, object> { ["Category"] = "家电", ["Product"] = "洗衣机", ["Amount"] = 2499.99m, ["Quantity"] = 2 }
        };
    }
}

2. 动态生成列并添加分组页脚

循环生成DataGrid列时,针对需要聚合的列,添加GroupFooterTemplate,并在模板中动态获取字典值转换后求和:

<RadzenDataGrid @ref="grid" Data="@data" Groupable="true">
    @foreach (var column in columns)
    {
        <RadzenDataGridColumn TItem="IDictionary<string, object>" Property="@column" Title="@column">
            @* 仅为指定列添加分组统计页脚 *@
            @if (aggregateColumns.Contains(column))
            {
                <GroupFooterTemplate Context="group">
                    <div style="text-align:right; font-weight:bold;">
                        合计: @group.Sum(item => 
                            item[column] != null ? Convert.ToDecimal(item[column]) : 0m)
                    </div>
                </GroupFooterTemplate>
            }
        </RadzenDataGridColumn>
    }
</RadzenDataGrid>

关键注意事项

  • 类型转换:必须将IDictionary中的object值转换为数值类型(如decimal、int),否则Sum()方法无法执行计算。
  • 空值处理:如果数据中可能存在null值,需要添加空值判断,避免转换异常。
  • 聚合列标记:通过aggregateColumns数组控制哪些列需要显示分组统计,避免不必要的计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:35:10