【问题标题】:jqGrid pagination with array of results带有结果数组的jqGrid分页
【发布时间】:2012-03-19 22:13:11
【问题描述】:

我一直在使用 qith jqGrid 4.3.1,但我正在使用一个额外的 javascript 方法来填充我的结果(它封装了返回 JSON 的端点)。

有没有办法可以直接在 jQGrid 中设置结果数、页码和可用页面,并让它正确显示在寻呼机中?而不是在寻呼机中设置'箭头'来触发我的'gridreload function()'?

Javascript:

$j('#searchResultsGrid').jqGrid({
        pager: '#gridpager',
        rowNum: 100,
        height: 415,
        width: 765,
        colNames: ['Action','First Name','Last Name','Email','Type of Record','Company','Account Name'],
        colModel: [
            {
            name:'Invite',
            index:'Invite', 
            width:50,
            align: 'center',
            sortable:false},
            {
            name: 'FirstName',
            index: 'FirstName',
            width: 75
            }, {
            name: 'LastName',
            index: 'LastName',
            width: 75
            },{
            name: 'Email',
            index: 'Email',
            width: 100
            },  {
            name: 'Type',
            index: 'Type',
            width: 75               
            },{
            name: 'Company',
            index: 'Company',
            width: 100              
            },{
            name: 'AccountName',
            index: 'AccountName',
            width: 100              
            }],
            //add the buttons for adding
        gridComplete: function(){
            ... 
            }
        }   
    });

/* Wrapper Method for Endpoint */
    methodController.searchLeadsContacts($j('#searchTerm').val(),pageNum,function(event,result){
            $j.each(result.result.searchResults, function(i, record){
              var rowData = [{
                'Id': record.Id,
                'FirstName': record.FirstName,
                'LastName': record.LastName,
                'Email': record.Email,
                'Type': record.Type,
                'Company': record.Company,
                'AccountName': record.AccountName
            }];
            $j('#searchResultsGrid').jqGrid('addRowData', record.Id, rowData[0]);
            });
            $j('#searchResultsGrid').setGridParam({ rowNum: 100 }).trigger("refresh");

HTML:

            <table id="searchResultsGrid"></table>
            <div id="gridpager"></div>  

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    你永远不应该使用旧的addRowData,尤其是在循环中。除了您描述的问题之外,addRowData 是填充网格的最慢方法,因为在每次修改页面时,都应该重新计算页面上所有现有元素的位置(甚至是之前添加的行)。

    你应该做的是使用jqGrid的data参数来创建带有数据的网格。如果您使用gridview: true(我的默认选项),则网格的包含将在一次操作中放置在网格中。

    您也可以将datatype: 'jsonstring'datastr 与数据一起使用。在这种情况下datastr 的值可以是 object 而不仅仅是 JSON 字符串。

    如果您从服务器加载数据并且可以使用jQuery.ajax 传输数据,您应该使用datatype: 'json'。 jqGrid 为您提供了许多自定义可能性,因此您可以实际实现 jqGrid 为您内部生成的 Ajax 请求。

    【讨论】:

    • 感谢@Oleg,我将删除循环中的“addRowData”,并尝试将数组(在我处理后)直接应用于jqGrid,并使用.trigger('gridreload'); 重新加载它
    • @jordan.baucke:只有在设置data 参数后才调用refreshIndex 方法很重要。 (见here
    猜你喜欢
    • 2011-03-30
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多