I have a question, when the grid is empty why does it show Page 1 of 0
can't it be Page 1 of 1
or something more reasonable?
My code
var xml=client.responseText;
var xmlDoc = $.parseXML(xml);
var $xml = $(xml);
xml=xml.replace(/<productId>1/g, "<productId>"+productMap['1']);
xml=xml.replace(/<productId>2/g, "<productId>"+productMap['2']);
xml=xml.replace(/<productId>3/g, "<productId>"+productMap['3']);
$('#configDiv').empty();
$('#configDiv').html( '<div id="configDetailsGrid" width="100%"><table id="list1" width="100%"></table><div id="gridpager"></div></div>');
//var grid = jQuery("#list1");
//var iconAlert;
var getColumnIndexByName = function (grid, columnName) {
var cm = grid.jqGrid('getGridParam', 'colModel'), i = 0, l = cm.length;
for (; i < l; i += 1) {
if (cm[i].name === columnName) {
return i; // return the index
}
}
return -1;
},
grid = jQuery("#list1"),
iconAlert = '<span class="ui-state-error" style="border:0"><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span></span>';
grid.jqGrid({
datastr : xml,
datatype: 'xmlstring',
//datatype: 'clientside',
colNames:['cfgId','Name', 'Host','Operating System', 'Description','Product', 'Type', 'Last Updated Time','Last Updated By','',''],
colModel:[
{name:'cfgId',index:'cfgId', width:90, align:"left", hidden:true},
//{name:'updateDate',index:'updateDate', width:12, align:'center', /*formatter: oldConfigurationWarning*/ },
{name:'cfgName',index:'cfgName', width:70, align:"left", formatter: 'showlink', formatoptions: {baseLinkUrl: '#'} },
{name:'hostname',index:'hostname', width:70, align:"left"},
{name:'osname',index:'osname', width:90, align:"left"},
{name:'cfgDesc',index:'cfgDesc', width:90, align:"left"},
{name:'productId',index:'productId', width:40, align:"left"},
{name:'cfgType',index:'cfgType', width:50, align:"left"},
{name:'updateDate',index:'updateDate',sorttype:'Date', width:120, align:"left"},
{name:'emailAddress',index:'emailAddress', width:120, align:"left"},
{name:'absolutePath',index:'absolutePath', width:90, align:"left", hidden:true},
{name:'fileName',index:'fileName', width:90, align:"left", hidden:true}
],
pager : '#gridpager',
rowNum:1000,
rowList:[10,50,100],
scrollOffset:0,
height: 'auto',
emptyrecords: 'No configurations loaded',
autowidth:true,
viewrecords: true,
gridview: true,
multiselect: true,
xmlReader: {
root : "list",
row: "Response",
userdata: "userdata",
repeatitems: false
},
loadComplete: function () {
var count = grid.jqGrid('getGridParam');
var ts = grid[0];
if (ts.p.reccount === 0) {
grid.hide();
emptyMsgDiv.show();
} else {
grid.show();
emptyMsgDiv.hide();
}
//for showlink and icon alert having date difference more than 90 days
var iRow, row, trClasses, $cell,
icfgName = getColumnIndexByName(grid, 'cfgName'),
iupdateDate = getColumnIndexByName(grid, 'updateDate'),
mygrid = grid[0],
rows = mygrid.rows,
cRows = rows.length,
myLink = function (e) {
var $td = $(e.target).closest('td'),
text = $td.text(),
$tr = $td.closest('tr'),
rowid = $tr[0].id;
goToViewAllPage(rowid);
};
for (iRow = 0; iRow < cRows; iRow += 1) {
row = rows[iRow]; // row.id is the rowid
trClasses = row.className.split(' ');
if ($.inArray('jqgrow', trClasses) > 0) {
// the row is a standard row (only if subGrid:true are used)
var cellvalue1,firstDate,secondDate;
$cell = $(row.cells[icfgName]);
cellvalue1=$(row.cells[iupdateDate]).text();
firstDate = new Date();
//console.info(cellvalue1+", "+cellvalue1.length);
//var cellvalue1="08-18-2011 11:49:01";
if(cellvalue1.length>25)
{
secondDate=new Date();
//secondDate = secondDate.substring(0, secondDate.length-3);
if(diffOf2Dates(firstDate,secondDate,true)>=expireCondition)
{
$cell.prepend(iconAlert);
}
$cell.click(myLink);
}
else
{
secondDate = cellvalue1.substring(0, cellvalue1.length-6);
if(diffOf2Dates(firstDate,secondDate,false)>=expireCondition)
{
$cell.prepend(iconAlert);
}
$cell.click(myLink);
}
}
}
},
onSelectRow: function(id,status){
}
});
grid.jqGrid('navGrid','#gridpager',{edit:false,add:false,del:false});
var myGrid = $("#list1");
$("#cb_"+myGrid[0].id).hide();
// place div with empty message insde of bdiv
emptyMsgDiv.insertAfter(grid.parent());
//$("#list1").setGridParam({rowNum:10});
//$("#list1").trigger("reloadGrid");
$("#list1").setGridParam({rowNum:10}).trigger("reloadGrid");
$("#list1").sortGrid('updateDate', false, 'desc');
My Xmldata (when empty)
<Response>
<isSuccess>true</isSuccess>
<operation>viewall</operation>
<message>No configurations loaded</message>
</Response>
Update
I updated accordingly but no still no luck, I still get the same old Page 1 of 0
xmlReader: {
/*root : "list",
row: "Response",*/
root:"Response",
row:"list",
userdata: "userdata",
repeatitems: false
},
my jquery.jqGrid.min.js file changes
if(locdata) {
ts.p.records = gl;
//Change after 1 of 0 (Oleg)ts.p.lastpage = Math.ceil(gl/ rn);
ts.p.lastpage = Math.max(ts.p.page,Math.ceil(gl/ rn)); //line no 1181
}
my response
<Response>
<isSuccess>true</isSuccess>
<operation>viewall</operation>
<message>No configurations loaded</message>
</Response>
Update, something usefull
If we reload the grid it solves the problem too
jQuery("#list1").setGridParam({rowNum:10}).trigger("reloadGrid");
I don't see that the XML data corresponds to
xmlReader
which you use. Probably you should switch the values ofroot
androw
properties:Additionally the input XML data contain no
page
,total
andrecords
properties. In case of usage of any otherdatatype
as'xml'
or'xmlstring'
you can definepage
,total
andrecords
as functions inside ofjsonReader
. ThexmlReader
parameter don't support it.Currently you don't define
page
,total
andrecords
properties. So the default values are used:page: "rows>page"
,total: "rows>total"
,records: "rows>records"
.The bug which I described in the answer and in the bug report is still not fixed in the code of jqGrid 4.2.0. So your current data will display "1 of NaN" before you apply the fix.
After all you can consider to change the line 1193 of the jqGrid code
to have other value in the
lastpage
.UPDATED: I suggest that you modify the line
ts.p.lastpage = Math.ceil(gl/ rn);
of the jqGrid code tots.p.lastpage = Math.max(ts.p.page,Math.ceil(gl/ rn));
.In the case if your input data will contain no
<page>
element or if it contains<Response><page>1</page>...
you will see1 of 1
. If your XML data will contain<Response><page>0</page>...
you will see0 of 0
.I can't see any positive effect to Oleg's latest update and the use of max(), because in my use context, the code doesn't go through this part. However, there is another instance of ts.p.lastpage = ... in the source code.
to be replaced with:
That worked for me.