我的目标是在jqGrid中执行多级分组,并为每个级别添加摘要页脚。
我已经在他们的官方网站上使用这些代码动态更改我扩展的分组,以进行动态三级分组。
我创建了3个组合框来选择与每个级别的分组相关的列名。
我已经实现了mutli级别分组,但我在这里遇到的问题是摘要页脚是每页而不是每组中所有行的总和。
我尝试了几种解决方案: 其中之一,解决方案在此链接http://www.guriddo.net/demo/guriddojs/grouping/summary_and_grand_total/index.html中实施,但它对我不起作用。
我尝试自定义summaryType函数来计算客户端上每个组的总和行,但我不能。
现在,我准备了在服务器端按照第一级分组的列表,然后我在客户端获取它以使用“userdata”填充summury页脚。 这是我的功能:
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 演示来演示这个问题。
答案 0 :(得分:0)
主要问题,我看到:您的演示需要动态分组,用户可以选择列的顺序。它使任何服务器端计算都没有价值。如果您确实有固定的分组顺序,那么您应该简化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
返回。