我有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。
第一种方法将为您提供解决问题的最简单方法。第二种方法允许从用户的角度创建最舒适的网格。