简体   繁体   English

Jqgrid显示第1页的0为空

[英]Jqgrid showing page 1 of 0 on empty

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? 我有一个问题,当网格为空时为什么它显示Page 1 of 0不能是Page 1 of 1或更合理的东西?

在此输入图像描述

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) 我的Xmldata(空的时候)

<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 我相应地更新了但是仍然没有运气,我仍然得到同样的旧Page 1 of 0

 xmlReader: {
                  /*root : "list",
                  row: "Response",*/
                  root:"Response",
                  row:"list",
                  userdata: "userdata",
                  repeatitems: false
              },

my jquery.jqGrid.min.js file changes 我的jquery.jqGrid.min.js文件发生了变化

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. 我没有看到XML数据对应于您使用的xmlReader Probably you should switch the values of root and row properties: 您可能应该切换rootrow属性的值:

xmlReader: {
    root : "list",
    row: "Response",
    userdata: "userdata",
    repeatitems: false
}

Additionally the input XML data contain no page , total and records properties. 此外,输入XML数据不包含pagetotalrecords属性。 In case of usage of any other datatype as 'xml' or 'xmlstring' you can define page , total and records as functions inside of jsonReader . 如果使用任何其他datatype'xml''xmlstring'您可以将pagetotalrecords定义为jsonReader函数。 The xmlReader parameter don't support it. xmlReader参数不支持它。

Currently you don't define page , total and records properties. 目前,您没有定义pagetotalrecords属性。 So the default values are used: page: "rows>page" , total: "rows>total" , records: "rows>records" . 因此使用默认值: 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. 我在答案错误报告中描述的错误仍然没有在jqGrid 4.2.0的代码中修复。 So your current data will display "1 of NaN" before you apply the fix. 因此,在应用修复之前,您当前的数据将显示“1 NaN”。

After all you can consider to change the line 1193 of the jqGrid code 毕竟,您可以考虑更改jqGrid代码的第1193

ts.p.lastpage = Math.ceil(gl/ rn);

to have other value in the lastpage . lastpage有其他值。

UPDATED : I suggest that you modify the line ts.p.lastpage = Math.ceil(gl/ rn); 更新 :我建议您修改行ts.p.lastpage = Math.ceil(gl/ rn); of the jqGrid code to ts.p.lastpage = Math.max(ts.p.page,Math.ceil(gl/ rn)); jqGrid代码到ts.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 see 1 of 1 . 如果输入数据不包含<page>元素或者包含<Response><page>1</page>...您将看到1 of 1 If your XML data will contain <Response><page>0</page>... you will see 0 of 0 . 如果您的XML数据将包含<Response><page>0</page>...您将看到0 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. 我看不出对Oleg的最新更新和max()的使用产生任何积极影响,因为在我的使用上下文中,代码没有经过这一部分。 However, there is another instance of ts.p.lastpage = ... in the source code. 但是,源代码中还有另一个ts.p.lastpage = ...的实例。

ts.p.lastpage = lp === undefined? ts.p.lastpage = lp === undefined? 1 : lp; 1:lp;

to be replaced with: 被替换为:

ts.p.lastpage = lp === undefined || ts.p.lastpage = lp === undefined || lp === 0 ? lp === 0? 1 : lp; 1:lp;

That worked for me. 这对我有用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM