jqGrid刷新本地数据(JSON对象)

Koo*_*obz 23 jquery jqgrid

我正在尝试将jqGrid与本地数据一起使用,我发现了一些问题:

我正在初始化这样的事情:

function refreshGrid($grid, results)
{
    $grid.jqGrid({
  data: results,
        datatype: "local",
        colNames:['#','File', 'Category', 'Line Number', 'Message Text','Detailed'],
        colModel:[
            {name:'count',index:'count', width:100, resizable: true},
            {name:'basename',index:'basename', width:100, resizable: true, classes:['basename']},
            {name:'category',index:'category', width:60, resizable: true},
            {name:'linenumber',index:'linenumber', width:60, resizable: true},
            {name:'text',index:'text',width:400, resizable: true},
            {name:'detailed',index:'detailed',width:100,classes:['detailed'], resizable: true }
            ],
        viewrecords: true,
     rowNum:100,
     rowList:[100,200],
     pager: '#debug_errors_pager',
     caption:"JSON Example"
 });
}
Run Code Online (Sandbox Code Playgroud)

我传入的数据results是一个对象数组.

问题:

1)寻呼机完全关闭.它显示正确的计数,但它实际上不允许我翻阅数据.

2)我无法刷新数据.我正在使用自己的搜索功能来达到我的目标results.我无法弄清楚如何更新现有数据.网格第一次初始化.在后续尝试中,它初始化为空表.

3)我尝试过这样的事情:

$grid.empty() - 因为$ grid对象由jqgrid修饰,所以不起作用.我试图"核"旧网格,然后简单地重新渲染它作为一种解决方法.`$ grid.trigger('reloadGrid') - 不起作用,不知道为什么.

注意:这是使用jQGrid 3.7.

小智 31

你可以使用简单:

jQuery("#list")
    .jqGrid('setGridParam',
        { 
            datatype: 'local',
            data:mydata
        })
    .trigger("reloadGrid");
Run Code Online (Sandbox Code Playgroud)


Meg*_*gan 23

我能够实现类似的东西.我的问题的技巧是在更新数据网格参数之前清除数据.假设您的网格在其他地方初始化(使用数据类型:'local'),请尝试:

function refreshGrid($grid, results) {
    $grid.jqGrid('clearGridData')
        .jqGrid('setGridParam', { data: results })
        .trigger('reloadGrid', [{ page: 1}]);
}
Run Code Online (Sandbox Code Playgroud)

  • 另外如果需要防止新数据的页面更改(如果可能的话)(这样用户将在重新加载后保持在同一页面上)这样的东西应该使用代码`var prevPage = $ grid.jqGrid("getGridParam",'page' ); var rowNum = parseInt($ grid.jqGrid("getGridParam",'rowNum'),10); var lastPage = Math.ceil(newData.length/rowNum); $ grid.jqGrid('clearGridData').jqGrid('setGridParam',{data:newData}).jqGrid('setGridParam',{lastpage:lastPage}).trigger('reloadGrid',[{page:prevPage}]) ;` (2认同)

bru*_*uno 7

问题1:

如果我们为客户端数据定义了网格的寻呼机,则会自动禁用寻呼机中的按钮.换句话说,当前版本的网格不支持客户端分页和搜索.

本地数据

问题2:你试过了吗:

 $("#list").GridUnload();
Run Code Online (Sandbox Code Playgroud)

看到这里gridUnload()和和之间的差异trigger('reloadGrid').

  • 是的,我尝试过GridUnload,没有骰子.网格卸载,永远不会回来. (2认同)

Way*_*rer 6

我还没有找到一个很好的文档化方法来更新jqGrid的本地数据,这里是我如何扩展jqGrid来解决我的问题:

$.extend($.fn.jqGrid, { setData: function(data) {
    this[0].p.data = data;
    return true;
} } );
Run Code Online (Sandbox Code Playgroud)

在此之后,您可以执行以下操作以使用新数据更新jqGrid:

假设您的网格声明如下:

    jQuery("#list").jqGrid({ datatype: "local", ... other params ... });
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

jQuery("#list").jqGrid('setData', array_with_new_data);
jQuery("#list").trigger("reloadGrid");
Run Code Online (Sandbox Code Playgroud)

PS查看如何从网格中获取所有数据的链接检索网格的内容


zis*_*han 5

在刷新现有网格上的数据时,以下内容适用于我:

var gridData = [...];

var grid = jQuery('#gridId');
grid.jqGrid('clearGridData');
if( grid.get(0).p.treeGrid ) {
    grid.get(0).addJSONData({
        total: 1,
        page: 1,
        records: gridData.length,
        rows: gridData
    });
}
else {
    grid.jqGrid('setGridParam', {
        datatype: 'local',
        data: gridData,
        rowNum: gridData.length
    });
}
grid.trigger('reloadGrid');
Run Code Online (Sandbox Code Playgroud)

我必须这样做,因为reloadGrid()调用populate(),populate()调用addLocalData()并将返回值传递给addJSONData(),但是对于treeGrid == true,addLocalData()不返回任何内容,并且addJSONData()后来什么也没做.