代码之家  ›  专栏  ›  技术社区  ›  Koobz

jqgrid刷新本地数据(json对象)

  •  23
  • Koobz  · 技术社区  · 14 年前

    我尝试将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"
     });
    }
    

    我传递的数据, results 是一个对象数组。

    问题:

    1)呼叫器完全关闭。它显示了正确的计数,但实际上不允许我翻阅数据。

    2)无法刷新数据。我使用自己的搜索功能 结果 . 我不知道如何更新现有的数据。网格首次初始化。在随后的尝试中,它初始化为空表。

    3)我尝试过以下方法:

    $grid.empty() -因为$grid对象由jqgrid修饰,所以无法工作。我试图“核化”旧网格,并简单地重新渲染为一个变通方法。 `$grid.trigger(“reloadgrid”)-不起作用,不知道为什么。

    注意:这是使用jqgrid 3.7。

    6 回复  |  直到 6 年前
        1
  •  31
  •   Kees C. Bakker    13 年前

    您可以使用简单的:

    jQuery("#list")
        .jqGrid('setGridParam',
            { 
                datatype: 'local',
                data:mydata
            })
        .trigger("reloadGrid");
    
        2
  •  22
  •   Megan Subhajit Mukherjee    13 年前

    我也能实现类似的目标。我的问题的诀窍是在更新数据网格参数之前清除数据。假设网格已在其他地方初始化(数据类型为“local”),请尝试:

    function refreshGrid($grid, results) {
        $grid.jqGrid('clearGridData')
            .jqGrid('setGridParam', { data: results })
            .trigger('reloadGrid', [{ page: 1}]);
    }
    
        3
  •  7
  •   David Gardiner    8 年前

    问题1:

    如果我们已经为带有客户端数据的网格定义了寻呼机,那么寻呼机中的按钮 自动禁用。换句话说,当前发布的网格 不支持客户端分页和搜索。

    local data

    问题2:您是否尝试过:

     $("#list").GridUnload();
    

    看见 here 为了区别 gridUnload() trigger('reloadGrid') .

        4
  •  6
  •   Community Alex Howansky    7 年前

    我没有找到一个好的文件化方法来更新jqgrid的本地数据, 下面是我如何扩展jqgrid来解决我的问题:

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

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

    假设您的网格声明如下:

        jQuery("#list").jqGrid({ datatype: "local", ... other params ... });
    

    然后你可以做:

    jQuery("#list").jqGrid('setData', array_with_new_data);
    jQuery("#list").trigger("reloadGrid");
    

    请参阅有关如何从网格中获取所有数据的链接 Retrieving contents of the grid

        5
  •  5
  •   zishan    13 年前

    刷新现有网格上的数据时,以下内容对我有效:

    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');
    

    我必须这样做,因为reloadgrid()调用populate(),populate()调用addlocaldata()并将返回值传递给addjsondata(),但对于treegrid==true,addlocaldata()不返回任何值,addjsondata()随后不执行任何操作。

        6
  •  0
  •   Du-Lacoste    6 年前

    如果您使用的是本地数据,您应该提到您的本地数据 json 数据在 jqGrid setGridParam 财产

     jQuery("#list")
            .jqGrid('setGridParam', {
            datatype: 'local',
            data:results //json object
        });
    

    再装填 这个 jqgrid 您可以使用以下内容。

     jQuery("#list").trigger("reloadGrid");