【问题标题】:how to reset jqgrid after refreshing its data刷新数据后如何重置jqgrid
【发布时间】:2014-04-30 06:16:52
【问题描述】:

我正在用这个脚本刷新 jqgrid:

$('#btnRefresh').click(function () {
   $.ajax({
      type : "GET",
      url: "${pageContext.request.contextPath}/General/ProvinceLoadGrid.json",
      success: function (data) {
           if (data != null) {
               jQuery('#dataTable').jqGrid('clearGridData')
                     .jqGrid('setGridParam', {data: data, page: 1})
                     .trigger('reloadGrid');
           }
      }
   });
)};

我已将 jqgrid 配置为在浏览页面后保存选定的行。 此脚本触发重新加载网格以重新加载数据,但这会产生问题。 问题是当我在第 1 页中选择第一行时,(当每页有 10 条记录时) 第二页上的第一条记录(第 11 条记录)也被选中。也选择了第 3 页上的记录(第 21 条记录)等... 所有这些都发生在 reloadGrid 之后。 jqgrid 正在正确保存我在每个页面上的选择,但是在重新加载网格后会出现此问题。

我该如何解决这个问题?

【问题讨论】:

  • 感谢锂。我将数据类型更改为本地以进行客户端刷新。

标签: jquery ajax jqgrid


【解决方案1】:

试试这个:

if (data != null) {
 jQuery('#dataTable').jqGrid('clearGridData')
 jQuery('#dataTable').jqGrid('setGridParam', {data: data, page: 1})
 jQuery('#dataTable').trigger('reloadGrid');
}

【讨论】:

  • 在我现在使用的代码之前,我一直在使用这些代码。它们之间没有区别
  • 我还清除了通过页面保存所选行的数组。但没有任何区别。这是因为当页面加载时,jqgrid 的 loadComplete 发生并且 select 什么都没有。当我浏览页面时, loadComplete 会更新它用于保存选择并选择行的数组。刷新后,loadComplete 将所有页面视为第 1 页。这就是为什么当我选择第 1 页中的第一行时,其他页面中的所有第一行也被选中
  • @Lithium:这是不同的问题。您需要修改行选择器以限制到第一页。
  • 此代码更新数组以选择行:/ var updateIdsOfSelectedRows = function (id, isSelected) { var index = $.inArray(id, idsOfSelectedRows); if (!isSelected && index >= 0) { idsOfSelectedRows.splice(index, 1); } else if (index
  • $("#jqGridAsistencia").jqGrid('clearGridData'); $("#jqGridAsistencia").jqGrid('setGridParam', { data: gridArrayData}); $("#jqGridAsistencia")[0].grid.endReq(); $("#jqGridAsistencia").trigger('reloadGrid');
【解决方案2】:

我修好了! 问题是重新加载网格后数据类型重置为其默认值,我们需要再次将其设置回 json 或 xml!

$('#btnRefresh').click(function () {
   $.ajax({
      type : "GET",
      url: "${pageContext.request.contextPath}/General/ProvinceLoadGrid.json",
      success: function (data) {
           if (data != null) {
               jQuery('#dataTable').jqGrid('clearGridData')
                     .jqGrid('setGridParam', {data: data, datatype: 'json'})
                     .trigger('reloadGrid');
           }
      }
   });
)};

【讨论】:

    【解决方案3】:

    为了避免所有问题,我这样做

    Html - 将 jQgrid 表包含在一个 div 中

    <div id="tableDivID">
      <table id="tableID"></table>
      <div id="tablePagerID"></div>
    </div>
    

    jquery - 激活 jQgrid 的函数

    function activatejQGrid(data)
    {
    
    $("tableID").jQGrid({
    //code for jQgrid initilise with *data*
    }}
    
    }
    

    重新初始化 jQgrid

    $("#tableDivID").replaceWith(function () {
      return "<div id='tableDivID'><table id='tableID'></table><div id='tablePagerID'></div>
    </div>";
      });
    activatejQGrid(data);
    

    【讨论】:

      猜你喜欢
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多