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

DevExpress JS dxDataGrid:自定义指定分组层级的汇总值

解决dxDataGrid分组汇总层级自定义控制的问题

我太懂你这种烦恼了——DevExpress默认把汇总值往所有上层分组冒泡的行为,确实会打乱咱们想要的层级计算逻辑。不过别担心,通过自定义汇总函数,咱们可以精准控制不同分组层级的汇总行为,让第3、4级用默认SUM,第2级走自定义逻辑。

下面是具体的实现思路和代码示例:

核心思路

把原来的summaryType: "sum"改成"custom",然后在calculateCustomSummary函数里,根据当前分组的groupLevel(注意dxDataGrid的层级从0开始计数)来分支处理:

  • 第3、4级分组对应groupLevel = 2和3,执行默认的SUM累加逻辑
  • 第2级分组对应groupLevel = 1,执行你自己的自定义计算逻辑
  • 顶级汇总(groupLevel = -1)可以选择隐藏或自定义

代码实现示例

// 先把自定义汇总逻辑抽成复用函数,避免重复代码
function handleCustomSummary(options) {
    const currentLevel = options.groupLevel;

    // 处理第3、4级分组:用默认SUM汇总
    if (currentLevel === 2 || currentLevel === 3) {
        switch(options.summaryProcess) {
            case "start":
                options.totalValue = 0; // 初始化累加器
                break;
            case "calculate":
                options.totalValue += options.value; // 累加当前行的值
                break;
            case "finalize":
                // 这里可以加小数格式化等收尾操作,比如保留两位小数
                // options.totalValue = parseFloat(options.totalValue.toFixed(2));
                break;
        }
    } 
    // 处理第2级分组:自定义计算逻辑
    else if (currentLevel === 1) {
        switch(options.summaryProcess) {
            case "start":
                // 初始化自定义计算需要的变量,比如这里示例统计大于100的值的总和
                options.totalValue = 0;
                break;
            case "calculate":
                // 这里写你的自定义逻辑,比如只累加大于100的数值
                if (options.value > 100) {
                    options.totalValue += options.value;
                }
                // 也可以做其他计算,比如取最大值、加权平均等
                // options.totalValue = Math.max(options.totalValue, options.value);
                break;
            case "finalize":
                // 自定义计算的收尾,比如格式化结果
                break;
        }
    }
    // 顶级汇总(最外层):可以选择不显示
    else {
        options.totalValue = null;
    }
}

// 配置dxDataGrid
$("#gridContainer").dxDataGrid({
    // 你的表格列配置、分组配置...
    grouping: {
        autoExpandAll: false,
        // 你的4级分组字段配置
        groups: ["level1", "level2", "level3", "level4"]
    },
    summary: {
        groupedItems: [
            {
                column: "amount", // 需要汇总的字段1
                summaryType: "custom",
                displayFormat: "Total: {0}",
                calculateCustomSummary: handleCustomSummary
            },
            {
                column: "quantity", // 需要汇总的字段2
                summaryType: "custom",
                displayFormat: "Count: {0}",
                calculateCustomSummary: handleCustomSummary
            }
            // 其他需要汇总的字段同理配置
        ]
    }
});

关键注意点

  1. 层级对应关系:dxDataGrid的分组层级从0开始计数——你设置的第一个分组字段(最外层)是groupLevel = 0,第二个(第2级)是1,第三个(第3级)是2,第四个(第4级)是3,一定要根据你的实际分组顺序调整判断条件。
  2. 自定义逻辑扩展:在第2级的calculate阶段,你可以完全自定义计算逻辑,比如基于当前分组的其他数据(可以通过options.group.value获取当前分组的键值)做特殊处理。
  3. 多字段复用:把汇总逻辑抽成单独的函数,多个汇总字段可以直接复用,减少重复代码。

测试的时候记得展开各个分组层级,确认第2级的汇总值是你自定义的结果,第3、4级是正常的SUM累加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:18:37