3

我在这篇文章中找到了一种在 javascript 中对 jqGrid 列求和的好方法,如下所示:

var total = $('#grid_id').jqGrid('getCol','col_name',false,'sum');

这很好,但我遇到的问题是我想要求和的列有时有空格而不是数字,并且total上面示例中的变量返回NaN.

有谁知道如何调整这个功能,使空白就像一个零?

谢谢!

** 更新 **

正如 Oleg 在评论中指出的那样,您需要在 colModel 中使用格式化程序。一旦我把它formatter: 'number'放在我的 colModel 中,所有的空格都被填充为零,它就可以工作了!请参阅示例代码:

$("#grid_id").jqGrid({
    url:'ajax_script.php?sql=' + sql1,
    height: 275,
    shrinkToFit: true,
    width: 800,
    datatype: 'xml',
    mtype: 'POST',
    colNames:["Customer","Job", "Sched QNTY Sell","Sched Total Sell"],
    colModel:[
        {name:"Customer",index:"Customer",width:"16"},
        {name:"JobNum",index:"JobNum",width:"16"},
        {name:"Sched Qnty Sell",index:"Sched Qnty Sell",width:"20", formatter: 'number'},
        {name:"Sched Total Sell",index:"Sched Total Sell",width:"20", formatter: 'number'}
    ],
    rowNum:10000,
    sortname: 'Customer',
    sortorder: 'asc',
    viewrecords: true,
    gridview: true,
    caption: 'Scheduled to Bill',
    footerrow : true,
    altRows : true,
    gridComplete: function(){
        $(this).jqGrid('footerData','set',{'Customer':'TOTALS:'});
        var colnames = $(this).jqGrid('getGridParam','colModel');
        for (var i = 2; i < colnames.length; i ++){
            var tot = $(this).jqGrid('getCol',colnames[i]['name'],false,'sum');
            var ob = [];
            ob[colnames[i]['name']] = tot;
            $(this).jqGrid('footerData','set',ob);
        }
    }
})
4

2 回答 2

7

如果您不想在空列上显示这些零,可以使用unformat选项:

{ name:"Column Name", index:"Column Index", width:"20", unformat: unformatNullColumn, formatter: 'number' }

function unformatNullColumn(cellvalue, options) {
    return (parseFloat(cellvalue) || 0);
}

在这个答案中解释得很好。

于 2012-11-28T09:50:37.083 回答
2

jqGrid 首先使用 unformatter(如果您为列定义格式化程序)或仅获取innerHTML并解码 HTML(字符“<”可以以“<”形式编码)从列的单元格中获取数据。然后使用 jqGridparseFloat将数据转换为数字。最后将汇总数字。

我认为最好的方法是在填充网格之前修剪数据。如果您不能在服务器端执行此操作,则可以使用beforeProcessing回调。

于 2012-05-15T14:42:38.917 回答