如何使用jqgrid中的分组方法进行总结?

如何使用jqgrid中的分组方法进行总结?,jqgrid,grouping,Jqgrid,Grouping,我对使用jqgrid的摘要有一个问题。我有一个专栏,我有分钟和小时,我想把它们加起来 {name:'worked',index:'worked', width:'5%',title: false, align:"right",sortable:true,summaryType:'sum', summaryTpl:'<b>Total: {0}</b>'}, groupingView : { groupField : ['worked'],

我对使用jqgrid的摘要有一个问题。我有一个专栏,我有分钟和小时,我想把它们加起来

{name:'worked',index:'worked', width:'5%',title: false, align:"right",sortable:true,summaryType:'sum', summaryTpl:'<b>Total: {0}</b>'},
 groupingView : {
            groupField : ['worked'], 
            groupSummary : [true], 
            groupColumnShow : [true],
            groupText : ['<b>{0}</b>'], 
            groupCollapse : false, 
            groupOrder: ['asc']
        },

首先,您需要一些JavaScript函数来进行计算,例如:

function toMinutes(hhmmString) {
    var parts = hhmmString.split(':');
    return (+parts[0]) * 60 + (+parts[1]); 
}

function toHHMMString(minutes) {
    var hh   = Math.floor(minutes / 60);
    var mm = minutes - (hh * 60);

    if (hh < 10) {
        hh   = "0" + hh;
    }

    if (mm < 10) {
        mm = "0" + mm;
    }

    return hh + ':' + mm;
}

function timeSummary(val, name, record) {
    return toHHMMString(toMinutes(val || '00:00') + toMinutes(record[name] || '00:00'));
}

这将给出所需的结果。

thx对于您的答案,您有一个语法错误“+m;”,但这不是问题所在。问题是我不明白。您创建了一个具有3个参数的函数。当你在这里称它为“summaryType:workedSummary”时,它应该看起来像“summaryType:workedSummary(整数,字符串,字符串)”。目前这两种方法都不起作用。它只是告诉我“加载”过程。有什么想法吗?thx@Chester函数签名及其配置方式是正确的,您可以在此处进行检查:(转到coldModel Options-->summaryType)。该行为表明JavaScript中存在一些异常,因此可能在datat中存在一些我没有看到的内容,您能用一些示例数据发布到网格的链接吗?也许是一个JSFIDLE演示?如果没有,请检查您的浏览器中是否没有关于JavaScript异常的信息。@切斯特,我已经重写了解决方案,使用分钟并概括了一点,您现在可以检查吗?@tpeczekI使用您的方法的结果,用图像更新了我的帖子。问:为什么我在timeSummary()中对val、name或record发出警报时,它是空的?@Chester如果配置正确,jqGrid将为每一行调用
timeSummary
(这就是为什么您只按名称将其传递给选项,jqGrid需要实际函数而不是结果)-对于第一行,val应为空,对于下一行,val应为上一次调用的结果。
NaN
错误表明您的值转换失败。您能提供任何允许调试的原始数据吗?
    if (groupingName != -1) {
        $("#list2").jqGrid('groupingGroupBy', groupingName, {
             groupOrder : ['desc']
        });
    }else{
        $("#list2").jqGrid('groupingRemove');
    }
});
function toMinutes(hhmmString) {
    var parts = hhmmString.split(':');
    return (+parts[0]) * 60 + (+parts[1]); 
}

function toHHMMString(minutes) {
    var hh   = Math.floor(minutes / 60);
    var mm = minutes - (hh * 60);

    if (hh < 10) {
        hh   = "0" + hh;
    }

    if (mm < 10) {
        mm = "0" + mm;
    }

    return hh + ':' + mm;
}

function timeSummary(val, name, record) {
    return toHHMMString(toMinutes(val || '00:00') + toMinutes(record[name] || '00:00'));
}
{name: 'worked', index: 'worked', width: '5%', title: false, align: 'right', sortable: true, summaryType: timeSummary, summaryTpl: '<b>Total: {0}</b>' }