【问题标题】:jqPivot Ignoring group/row value in colTotals footerjqPivot 忽略 colTotals 页脚中的组/行值
【发布时间】:2015-06-29 21:40:12
【问题描述】:

这是创建的示例 - 数据透视表 JSFiddle 示例:here

这是我使用的网格选项:

{
    cmTemplate: { autoResizable: true },
    autoResizing: { compact: true },
    width: "600",
    height: "auto",
    rowNum: 10,
    iconSet: "fontAwesome",
    pager: true,
    caption: "Employee YTD Summary",
    groupingView: {
        groupColumnShow: [false],
        groupDataSorted: true,
        groupOrder: ["desc"]
    },
    onInitGrid: function () {
        var p = $(this).jqGrid("getGridParam"),
            userdata = p.datastr.userdata;
        p.data = $.grep(p.datastr, function (item) {
            return item.ComponentType !== "";
        });
        p.userData = userdata;
        p.datatype = "local";
    },
    footerrow: true
}

在从colTotals 汇总添加时需要忽略特定行/组的帮助

这是我从上面的例子中得到的网格部分

在此图片的页脚colTotals 部分显示所有列的总和,在这里我无法排除组BenefitAD 的总和。

colTotals 的预期总和

工作日、LOP、福利行不应在底部的汇总列(红色标记)中求和(因为它们不是必需的)

如何忽略 jqGrid 的 colTotals summary 中的完整组 ADBenefit 值。

谢谢

【问题讨论】:

  • 恐怕你问题正文的其他读者不会理解这个问题。您应该在问题的文本中包含小提琴代码中最重要的部分。最好包含显示您需要更改的部分的图片。此外,我也不完全理解您的要求。您是否想在 AD 和 Benefit 组中保留汇总行,但您想使用自定义总计汇总计算,其中将在总和中跳过组的项目?为什么你有这么奇怪的要求?

标签: jquery jqgrid free-jqgrid jqpivot


【解决方案1】:

您似乎想要对总摘要行中的值进行自定义计算。例如,在您可以删除colTotals: true 参数。它只对所有元素的总和进行标准计算。取而代之的是,您可以添加userDataOnFooter: true 选项,计算onInitGrid 内部的自定义摘要并将结果放入userdata。代码如下所示

userDataOnFooter: true,
onInitGrid: function () {
    var p = $(this).jqGrid("getGridParam"), userdata = {}, colModel = p.colModel,
        iColByName = p.iColByName;
    p.datastr = $.grep(p.datastr, function (item) {
        var notToIgnore = item.ComponentType !== "", prop;
        if (notToIgnore) {
            for (prop in item) {
                if (item.hasOwnProperty(prop) &&
                        iColByName[prop] != null &&
                        colModel[iColByName[prop]].summaryType === "sum" &&
                        // !!!below is the custom criteria to skip some items!!!
                        $.inArray(item.ComponentType, ["AD", "Benefit"]) < 0) {
                    userdata[prop] = (userdata[prop] || 0) + parseFloat(item[prop]);
                }
            }
        }
        return notToIgnore;
    });
   p.datastr.userdata = userdata;
}

修改后的数据可以看到结果:https://jsfiddle.net/OlegKi/bkqce0s0/14/

【讨论】:

  • onInitGrid 有替代品吗?因为当输入发生变化时,我必须使用类似($("#YTDSummary").trigger("reloadGrid"))的 reloadGrid,这不会被调用。
  • @ManiDeep:如果您需要将摘要的计算移到另一个地方。例如,您可以在单独的函数中包含计算 userData 参数的代码。您可以调用函数之前 .trigger("reloadGrid")。 jqGrid 将datatype: "jsonstring" 更改为datatype: "local"。所以你应该设置p.userData而不是p.datastr.userdata。或者,您可以在loadComplete 中计算摘要,并通过footerData 方法显式设置结果。 userDataOnFooter: true 不需要更多 (here)
  • @ManiDeep:另一个可能的回调示例是beforeRequest。 (你不应该忘记从回调中返回true!)。在回调中你可以更改jqGrid的userData参数,如果你使用userDataOnFooter: true选项,更改将自动显示在页脚行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多