我有jqgrid,每次下拉列表更改时都会调用它。
但是问题是jqGrid仅显示第一次加载的数据,此后,当我使用新数据集{对象数组}调用同一函数时,它不会自我更新。下面是代码:

  function loadGrid(colModel, data1) {
  var grid = $("#gridJQ");
  grid.jqGrid({
      datatype: "local",
      viewrecords: true,
      data: data1,
      height: "auto",
      rowNum: 5,
      autowidth: false, // set 'true' here
      rownumbers: true, // show row numbers
      rownumWidth: 25,
      colModel: colModel,
      pager: "#jqGridPager",
      height: "auto",
      caption: "Load jqGrid through Javascript Array",
  }).trigger("reloadGrid");  }


我检查了col模型和data1的值,它每次都在更改,但是网格不反映更改。

最佳答案

您写了“每当下拉列表更改时我都会打电话”。我认为代码有什么共同的理解问题。您最初在HTML页面上放置了空表<table id="gridJQ"></table>。第一次调用loadGrid会将空表转换为潜水表和潜水表的相对复杂的结构。您可以使用开发人员工具检查网格,以查看网格的外观。最初创建网格后,可以对数据进行排序,更改当前页面,更改列的宽度等等。所有动作大部分都会更改网格主体,而不会更改带有列标题的外部部分。

因此,您至少有两个主要选项(替代方法)来解决此问题:


您必须销毁jqGrid并重新创建它。您应该在$("#gridJQ").jqGrid("GridUnload");中的var grid = $("#gridJQ");行之前包括loadGrid
您可以继续将loadGrid功能仅用于初始创建网格。如果需要使用更新的data1重新加载网格的数据,则应调用clearGridData fisrt,然后使用setGridParam设置data参数的新值,最后使用$("#gridJQ").trigger("reloadGrid")来重新填充主体(不添加)根据新的data更改网格的外部部分)。您可以考虑使用current: true的其他reloadGrid选项,该选项也可以将当前选择保留在网格中。有关reloadGrid选项的更多信息,请参见the answer


第一种方法将为您提供解决问题的最简单方法。第二种方法允许从用户的角度创建最舒适的网格。

10-08 06:51
查看更多