我找到了一个很好的方法来在this post中的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);
}
}
})
答案 0 :(得分:7)
如果您不想在空列上显示这些零,可以使用 unformat 选项:
{ name:"Column Name", index:"Column Index", width:"20", unformat: unformatNullColumn, formatter: 'number' }
function unformatNullColumn(cellvalue, options) {
return (parseFloat(cellvalue) || 0);
}
在answer中解释得非常好。
答案 1 :(得分:2)
jqGrid首先使用unformatter(如果为列定义格式化程序)从列的单元格中获取数据,或者只获取innerHTML
并解码HTML(字符“&lt;”可以编码为形式“&lt;”)。然后jqGrid使用parseFloat
将数据转换为数字。最后,数字将总结。
我认为最好的方法是在填充网格之前修剪数据。如果您无法在服务器端执行此操作,则可以使用beforeProcessing
回调。