【问题标题】:jqGgrid: mutli-level grouping summary valuejqGrid:多级分组汇总值
【发布时间】:2018-03-17 03:29:33
【问题描述】:

我的目标是在 jqGrid 中执行多级分组并为每个级别添加摘要页脚。

我已经使用了他们官方网站上的代码来动态更改分组,我扩展为动态三级分组。

我创建了 3 个组合框来选择与每个级别的分组相关的列名。

我已经实现了多级分组,但我在这里遇到的问题是摘要页脚是每页而不是每组中所有行的总和。

我尝试了几种解决方案: 其中之一,在此链接中实现的解决方案http://www.guriddo.net/demo/guriddojs/grouping/summary_and_grand_total/index.html 但它对我不起作用。

我尝试自定义 summaryType 函数以计算客户端每个组的总和行,但我不能。

现在,我已经在服务器端准备了按第一级分组的列表,然后在客户端获取它以使用“userdata”填充摘要页脚。 这是我的功能:

var sumArraySearch = [];
var criteria = '';// column name selected  in Combobox to do the grouping
function sumSearch(val, name, record)
{
    if(init == 0){
        //  console.log ($("#griddata").jqGrid('getGridParam','userData').rows);
        var rows = $("#griddata").jqGrid('getGridParam','userData').rows;
        var size = $("#griddata").jqGrid('getGridParam','userData').rows.length;
         for (var i = 0; i < size; i++) {
            sumArraySearch[rows[i][criteria]]= rows[i]['brutto'];

         }
         init ++;
     }
    return sumArraySearch[record[criteria]];
}

我现在已经阻止,如果我从服务器发送 2 个列表:第一个是按第一级分组的数据,第二个是按第二级分组的数据,我如何才能获得每个组的正确总和,因为sum 由一个函数返回?

编辑:

我准备了一个JSFiddle demo 来演示这个问题。

【问题讨论】:

  • 1) 您在代码中使用 loadOnce: true 而不是 loadonce: true。您应该修复该选项。 2) 请附上您使用(可以使用)的jqGrid的version,以及jqGrid的forkfree jqGrid,商业Guriddo jqGrid JS或an版本 forceClientSorting: true,它扩展了选项 loadonce: true。 4) 如果您准备 JSFiddle 演示,它会很好地演示问题。
  • 能否请您准备一个带有数据的工作演示?只有这样才能找到所描述的问题
  • @Oleg:我正在使用免费的 jQgrid 4.4.3。升级版本到4.7的解决方法吗?
  • @nayomi:jqGrid 4.4.3 已经 4.5 岁了。 “jqGrid”一直存在到版本 4.7。之后 Tony Tomov 更改了许可协议,将产品名称改为“Guriddo jqGrid JS”并使其商业化(参见价格here)。我以“free jqGrid”的名义开始了 alternative fork,它在 MIT/GPL 许可下完全免费提供。因此,“free jqGrid”是产品的名称。我建议您决定是使用商业“Guriddo jqGrid JS”还是“免费 jqGrid”,并升级到相应 fork 的最新版本。
  • @Oleg:我使用了“免费的 jqGrid”。我准备了一个使用 4.15.1 版本的 jsFiddle 演示。你能看看吗? jsfiddle.net/nayoumi/d2v0neo5/36

标签: javascript jquery jqgrid


【解决方案1】:

我看到的主要问题是:您的演示需要动态分组,用户可以在其中选择列的顺序。它使任何服务器端计算变得毫无价值。如果你真的有固定的分组顺序,那么你应该简化userData的结构,让agt得到所需的总和,例如,

userData: {
    brutto: "1593.2",
    sums: { "455": "462.96", "806": "1130.06" }
}

它允许将summaryType函数简化为

summaryType: function sumSearch(val, name, record, groupInfo) {
    var p = $(this).jqGrid("getGridParam");
    return p.userData.sums[record.agt];
}

summaryType: function sumSearch(val, name, record, groupInfo) {
    var p = $(this).jqGrid("getGridParam");
    return p.userData.sums[groupInfo.keys[0]];
}

https://jsfiddle.net/OlegKi/d2v0neo5/43/

如果您真的需要用户选择分组列和分组的顺序动态那么你将不得不计算总和在客户端。例如,您可以使用p.lastSelectedData 参数以正确排序的顺序访问所有页面的完整数据,检查p.groupingView.groupField 以了解分组列的当前顺序,并使用groupInfo.keys 数组查看当前组的所有键.您将获得更复杂的代码,但您可以计算本地拥有信息的总和并从summaryType 返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多