是否有任何解决方法可以将自定义'formatter'添加到jqGrid中的userData
?我发现this问题,这对我很有帮助。下面是我用来填充jqGrid的代码。请注意,我填充userData
中的自定义jsonReader
对象并将其设置为loadComplete
中的网格我需要在总列中添加单独的'formatter'。如果有办法,请告诉我。提前谢谢。
var userDataTotals;
jq("#testGrid").jqGrid({
url:'local',
datatype: 'local',
mtype: 'GET',
colNames:[
'rowId','unitId',
'<fmt:message key="report.col1"/>',
'<fmt:message key="report.col2"/>',
],
colModel :[
{name:'rowId', index:'rowId',hidden: true,sortable: true,key:true},
{name:'unitId', index:'unitId',hidden: true,sortable: true,key:true},
{name:'outboundReadyDate', index:'outboundReadyDate', width:80,align:"center",sorttype:'integer',formatter:dateOnlyFmatter,datefmt:'Y M d'},
{name:'outboundDate', index:'outboundDate', width:80,align:"center",sorttype:'integer',formatter:dateOnlyFmatter,datefmt:'Y M d'},
],
// this will enable the footer row to display totals
footerrow : true,
//userDataOnFooter : true,
altRows : true,
//to hide pager buttons
pgbuttons:false,
recordtext:'',
pgtext:'',
gridview: true,
height:270,
loadonce: true,
sortname: 'rowId',
sortorder: 'asc',
viewrecords: true,
rowNum:30000,
loadComplete: function() {
// This will increase the column header height ( to show two rows in the header)
jq(".ui-jqgrid-sortable").css('white-space', 'normal');
jq(".ui-jqgrid-sortable").css('height', 'auto');
//Set the total values after load complete,otherwise
// custom formatter will format the total value as well.
jq("#mainReportGrid").jqGrid("footerData","set",userDataTotals,false);
//check the data type to avoid this code to execute when the pageload
var checkDatatype = myGrid.jqGrid("getGridParam","datatype");
if(checkDatatype =='json' && myGrid.getGridParam('records') == 0){
// when no records are displaying alert it to the user
alert(noRecordsMsg);
}
},
jsonReader : {
root: "dtos",
records: "records",
repeatitems: false,
cell: "cell",
id: "rowId",
userdata :function(obj) {
userDataTotals = {"outboundReadyDate":obj.totalOutBounded,
"outboundDate":obj.totalOutBoundReady};
}
},
//This will format the date of the grid (without displaying time)
function dateOnlyFmatter (cellvalue, options, rowObject){
var opts = options.colModel.formatoptions;
if(cellvalue==null || cellvalue=='undefined'){
return '-';
}else{
if(opts != undefined && rowObject.projectTypeName =='IOD'){
return 'N/A';
}
var now = new Date(cellvalue);
return now.format('M j, Y');
}
}
我使用自定义dateFormat.js
来格式化日期。
和json响应是 -
{
"dtos": [
{
"unitId": 1068,
"outboundDate": null,
"outboundReadyDate": 1317619303000,
"rowId": 13,
},
{
"unitId": 1105,
"outboundDate": 1317616970000,
"outboundReadyDate": 1317617213000,
"rowId": 14,
}
],
"totalOutBounded": 0,
"totalOutBoundReady": 4,
"rowTotal": 15,
"returnCode": 0,
"msg": ""
}
我使用sortType
作为integer
,因为从服务器我将'java'Date
对象直接传递给网格。为了对其进行排序,我需要将sortType
设置为integer
基本问题我所拥有的是在IE8中我无法看到'userData'总值。但在其他浏览器中,我可以看到它。我需要将userData
总值格式化为'超链接'。
没有userData
格式我可以在IE8中看到总数。因此,我认为不使用列'formatter'
将自定义格式化程序添加到总值(userData
)。
答案 0 :(得分:2)
您有许多小的语法错误:
colNames
和colModel
中删除尾随逗号。无法读取"rowId": 13,}
和"rowId": 14,}
。jQuery("#testGrid")
,但使用jQuery("#mainReportGrid")
设置页脚。url: 'local'
的情况下,url
或任何其他datatype: 'local'
参数无意义。在url
。datatype: 'local'
参数将被忽略(未使用)
myGrid
。您应该在代码的开头某处定义var myGrid = jQuery("#testGrid");
,或在var myGrid = $(this);
事件处理程序的开头定义loadComplete
。now.format('M j, Y')
而未发布format
的扩展方法Date
。您可以改为使用jqGrid方法:return $.fmatter.util.DateFormat(undefined, now, 'M j, Y', $.jgrid.formatter.date);
。===
而不是==
和!==
而不是!=
。请阅读here以获取更多信息。height: 'auto'
或scrollOffset: 0
。我建议你阅读the answer。如果您使用所描述的错误修复,则可以将行jq("#mainReportGrid").jqGrid("footerData","set",userDataTotals,false);
修改为行
myGrid.jqGrid("footerData", "set", myGrid.jqGrid('getGridParam', 'userData'), false);
不需要变量userDataTotals
,userdata
中的方法userdata
可以定义为
userdata: function (obj) {
return {
outboundReadyDate: obj.totalOutBounded,
outboundDate: obj.totalOutBoundReady
};
}
您可以看到here修改后的代码版本。