在页面页脚中,如果没有找到记录,是不是0的页面[1]应该说“Page [0]为0”?

时间:2013-05-21 20:19:48

标签: jqgrid

我注意到如果没有记录要返回,那么Paging页脚不应该说" 0 of 0"而不是" 1 of 0" ??

另外,也不应该禁用分页文本框。

这是我发送回jqGrid的JSON响应

{ "total":0, "page":0, "records":0, "rows":[] }

我使用的是jqGrid版本4.5.0

...谢谢

P.S。源代码如下......

        $('#'+jqgridSpreadsheetId).jqGrid({
            url: '../websrvc/JqGrid.ashx',
            datatype: 'json',
            mtype: 'POST',
            postData: { WhichJqgridTemplate: '<%=JqqridTools.Template.MyInventory%>', WhichAction: '<%=JqqridTools.Action.Display%>', WebpageQuickQuoteSalePrice: '<%=postQuickQuoteSalePrice%>' },
            colNames: ['Id', 'Stock Number', 'VIN', 'Year', 'Make', 'Model', 'Trim', 'Mileage', 'Purchase Price', 'Stock Date', 'Repair Cost', 'Total Cost', 'Days In Inventory', 'Hidden-Inventory-Tracker-Location-Id', 'Inventory Tracker Location', 'Links'],  //Display Text in Column Header...
            colModel: [
                       //In this case, use "sorttype" property in "colModel" for it to work when "loadonce" is set to true...
                       //formatter doc --> "http://www.trirand.com/jqgridwiki/doku.php?id=wiki:predefined_formatter&s[]=cell&s[]=formatter"...
                       //formatter hyperlink --> Stackoverflow posting was said to use formatter's function declaration instead of formatter's "showlink" followed by "formatoptions"...
                       //                    --> (Old Link) - http://stackoverflow.com/questions/5010761/linking-from-a-column-value-in-jqgrid-to-a-new-page-using-get...
                       //                    --> (New Link) - http://stackoverflow.com/questions/14529358/jqgrid-need-hyperlink-need-to-capture-value-through-jquery/14537512#14537512...
                       //                    --> (New Link) - http://www.trirand.com/jqgridwiki/doku.php?id=wiki:custom_formatter...
                       //                    --> Reasons are --> 1) far simpiler to use formatter for reading/writing and 2) much quicker and better performance...
                       { name: 'Id', index: 'Id', sorttype: 'int', width: 0, align: 'left', hidden: true, hidedlg: true },  //"hidedlg" is use to hide the hidden column in "Column Chooser"...
                       { name: 'StockNumber', index: 'StockNumber', sorttype: 'text', width: 100, align: 'center', searchoptions: { sopt: ['eq', 'ne'] } },
                       { name: 'Vin', index: 'Vin', sorttype: 'text', width: 140, align: 'center', searchoptions: { sopt: ['eq', 'ne'] } },
                       { name: 'Year', index: 'Year', sorttype: 'int', width: 50, align: 'center', searchoptions: { sopt: ['eq', 'ne'] } },
                       { name: 'Make', index: 'Make', sorttype: 'text', width: 80, align: 'center', searchoptions: { sopt: ['eq', 'ne'] } },
                       { name: 'Model', index: 'Model', sorttype: 'text', width: 80, align: 'center', searchoptions: { sopt: ['eq', 'ne'] } },
                       { name: 'Trim', index: 'Trim', sorttype: 'text', width: 100, align: 'center', searchoptions: { sopt: ['eq', 'ne'] } },
                       { name: 'Mileage', index: 'Mileage', sorttype: 'int', width: 60, align: 'center', formatter: 'number', formatoptions: {decimalSeparator:'',thousandsSeparator:',',decimalPlaces:0,defaultValue:'0'} },
                       { name: 'PurchasePrice', index: 'PurchasePrice', sorttype: 'currency', width: 80, align: 'center', formatter: 'currency', formatoptions: {decimalSeparator:'.',thousandsSeparator:',',decimalPlaces:2,defaultValue:'0.00',prefix:'$',suffix:''} },
                       { name: 'StockDate', index: 'StockDate', sorttype: 'date', width: 90, align: 'center', formatter: 'date', formatoptions: { newformat: 'm/d/Y' } },  //"formatter" and "formatoptions" is required for date sorting to works properly...
                       { name: 'RepairCost', index: 'RepairCost', sorttype: 'currency', width: 80, align: 'center', formatter: 'currency', formatoptions: { decimalSeparator: '.', thousandsSeparator: ',', decimalPlaces: 2, defaultValue: '0.00', prefix: '$', suffix: '' } },
                       { name: 'TotalCost', index: 'TotalCost', sorttype: 'currency', width: 80, align: 'center', formatter: 'currency', formatoptions: { decimalSeparator: '.', thousandsSeparator: ',', decimalPlaces: 2, defaultValue: '0.00', prefix: '$', suffix: '' } },
                       { name: 'DaysInInventory', index: 'DaysInInventory', sorttype: 'int', width: 65, align: 'center', formatter: 'number', formatoptions: { decimalSeparator: '', thousandsSeparator: ',', decimalPlaces: 0, defaultValue: '1' } },
                       { name: 'InventoryTrackerLocationId', index: 'InventoryTrackerLocationId', sorttype: 'int', width: 0, align: 'left', hidden: true, hidedlg: true },  //"hidedlg" is use to hide the hidden column in "Column Chooser"...
                       { name: 'InventoryTrackerLocation', index: 'InventoryTrackerLocation', sorttype: 'text', width: 120, align: 'center', searchoptions: { sopt: ['eq', 'ne'] } },
                       //Links is not present in json data from the website, so we customize it here...
                       { name: 'Links', index: 'Links', sorttype: 'text', width: 80, align: 'center', formatter: function (cellValue, options, rowObject) { return "<span style='text-decoration:underline;cursor:pointer;'>Links</span>" }, search: false }  //"search" is use to hide the field in search dialog...
            ],
            beforeSelectRow: function (rowid, e) {
                //http://stackoverflow.com/questions/16592547/how-to-have-custom-formatter-built-in-function-to-call-a-non-jqgrid-seperate-fun
                //http://stackoverflow.com/questions/16592547/how-to-have-custom-formatter-built-in-function-to-call-a-non-jqgrid-seperate-fun
                //http://stackoverflow.com/questions/14529358/jqgrid-need-hyperlink-need-to-capture-value-through-jquery/14537512#14537512
                //http://stackoverflow.com/questions/13761222/how-to-fire-loadcomplete-after-new-row-is-added-in-jqgrid/13765086#13765086
                //To attached javascript function to a clickable "Links" cell...
                if (this.p.colModel[$.jgrid.getCellIndex($(e.target).closest("td")[0])].name === jqgridColumnNameLinks) {
                    jqgridPopupDialogLinkOptions(
                        $(this).getCell(rowid, jqgridColumnIdStockNumber),                //Use $(this) instead for less overhead - It's what Oleg at jqGrid said....
                        $(this).getCell(rowid, jqgridColumnIdVin),                        //Use $(this) instead for less overhead - It's what Oleg at jqGrid said....
                        $(this).getCell(rowid, jqgridColumnIdInventoryTrackerLocationId)  //Use $(this) instead for less overhead - It's what Oleg at jqGrid said....
                    );
                    return false;
                }
            },
            pager: '#'+jqgridPagerId,
            rowNum: 10,
            rowList: [5, 10, 20, 50],  //Drop-down selection in footer - To show how many rows per page...
            //This "sortname"/"sortorder" tag must be specified for "getGridParam"'s 'datatype'/'sortname'/'sortorder' (column sorting) to work.  (Some kind of jqGrid bug or feature which we need to hack to do a workaround with)...
            <%if(postQuickQuoteSalePrice.Length > 0) {%>
            sortname: 'TotalCost', sortorder: 'desc',  //When coming from Quick-Quote webpage...
            <%} else {%>
            sortname: 'StockDate', sortorder: 'desc',  //When coming from any webpages, especially the Product webpage...
            <%}%>
            viewrecords: true,
            //gridview: true,
            //imgpath: '',
            caption: 'My Inventory',
            width: 1022,
            shrinkToFit: false,
            height: 400,
            sortable: true,  /* This allows both 1) Moving columns sideway to other location fields and 2) for jqGrid Column Chooser Plugin / JQuery Multiselect Plugin to work... */
            grouping: true,  /* This allows row data to be group into row grouping... */
            loadonce: true,  //In this case, use "sorttype" property in "colModel" for it to work when "loadonce" is set to true...
            emptyrecords: "No records to display",
            loadError: function (xhr, st, err) {
                alert("An error had occurred, please try again or notify webmaster of this error");
            },
            loadComplete: function () {
                //http://stackoverflow.com/questions/16639339/how-do-i-get-a-column-to-be-sort-in-descending-order-upon-loading...                   
                //=========================================================================================
                // the code will be executed only at the first loading because jqGrid
                // changes datatype to "local" after the first loading if we use
                // loadonce option. We use setTimeout to allows jqGrid to make the first
                // loading till the end and reload it AFTER that
                //=========================================================================================
                var $self = $(this);  //This is needed as seperate objects to seperate itself from the binding jqGrid or $(this) objects for it to work.  It wouldn't work if binded to itself...
                if ($self.jqGrid('getGridParam', 'datatype') === 'json') {  //This the value when loading webpage then the value of "datatype" option will become "local" afterward...
                    //$self.getGridParam({ sortname: 'TotalCost', sortorder: 'desc' });  //When coming from Quick-Quote webpage...
                    //$self.getGridParam({ sortname: 'StockDate', sortorder: 'desc' });  //When coming from any webpages, especially the Product webpage...
                    //$(this).triggerHandler('reloadGrid', [{ sortname: 'Year', sortorder: 'desc' }]);
                    setTimeout(function () {
                        //$('#' + jqgridSpreadsheetId).triggerHandler('reloadGrid', [{ sortname: 'Year', sortorder: 'desc' }]);
                        $self.triggerHandler("reloadGrid");
                    }, 50);
                }
                //=========================================================================================
                jqgridSummarySpreadsheetDisplay();
            }
        });

这是使用Firefox firebug的快照。你可以看到json结果是你要我做的,使用&#34; page&#34;:&#34; 0&#34;而不是&#34; page&#34;:0。网页中的jqGrid显示1而不是0。

enter image description here

1 个答案:

答案 0 :(得分:3)

我认为问题出在jqGrid源代码的the line

ts.p.page = $.jgrid.getAccessor(data,dReader.page) || ts.p.page || 0;

您应该将page的整数值更改为字符串值:

{ "total":0, "page":"0", "records":0, "rows":[] }

{ "total":"0", "page":"0", "records":"0", "rows":[] }

大部分精确对应于the documentation中描述的格式。

更新The demo重现您的问题,another demo使用固定的JSON数据("page":"0"代替"page":0)。如何看待修复工作。

更新2 :我现在看到问题在于使用loadonce: true。要解决问题,可以使用

localReader: {
    page: function (obj) {
        return obj.page !== undefined ? obj.page : "0";
    }
}

请参阅one more demo

更新3 :我发布了the full request来解决问题。修复程序已经合并(请参阅here)到github上jqGrid的主代码。