设置data属性时,jqGrid getLocalRow返回false

使用getLocalRow和data属性时遇到问题

 var $grid; getGrid = function () { $grid = $("list"); $grid.jqGrid({ mtype: "POST", colNames: [], colModel: [ .... ], pager: "", loadonce: true, multiselect: true, gridComplete: function () { var data = $(this).getDataIDs(); for(var i=0; i < data.length;i++){ $(this).setSelection(data[i]); // select all rows by default } }, loadComplete: function (data) { }, loadError: function (xhr) { } }); return $grid; }; 

基于2个场景,有两种方法可以填充网格。
在方案1中,我只是命中服务器URL并将数据作为JSON返回并填充在网格中。 使用此选项,当我遍历所选行并执行getLocalRow时,我获得所需的o / p。

在方案2中,我构造了一个数据对象并将其传递给同一个网格。 当我在此上下文中迭代并使用getLocalRow时,会出现问题,对于所有选定的行而不是行数据,它会变为false,但对getRowData工作正常。

方案1:

 $grid.jqGrid("clearGridData"); $grid.jqGrid("setGridParam", {url: '..', datatype: "json"}).trigger("reloadGrid"); 

方案2:

 $grid.jqGrid("clearGridData"); $grid("setGridParam", { data: MyOWNobject}).trigger("reloadGrid"); 

访问getLocalRow:

 var sel=[]; for (i = 0; i < $grid.jqGrid("getGridParam").selarrrow.length; i++) { sel.push($grid.jqGrid("getLocalRow", $grid.jqGrid("getGridParam").selarrrow[i])); } 

问题在于填充网格。 网格的每一行都必须获得唯一的id 。 如果您的数据已经有一些具有唯一数据的列,那么可以在列中使用key: true来通知jqGrid使用列中的值作为rowid。

我最后一次测试了jqGrid随时使用的数据,其中包含每个列中的id属性key: true属性,用于将一个值作为rowid的值。 如果您遵循该规则,则您报告的问题将不存在。 请参阅使用该代码的演示http://jsfiddle.net/OlegKi/y9KHY/92/

 $("#submit1").click(function () { var $grid = $("#gGrid"); var grps = [ { Name : "A", Group : "11" }, { Name : "B" , Group : "1122" } ]; $grid.jqGrid({ data: grps, colModel: [ { name: 'Name', key: true }, { name: 'Group' } ], cmTemplate: {width: 200}, rownumbers: true, multiselect: true, gridComplete: function () { $("#cb_" + this.id).click(); } }); }); $("#submit2").click(function () { var $grid = $("#gGrid"), p = $grid.jqGrid("getGridParam"), i; for (i = 0; i < p.selarrrow.length; i++) { alert("Data > " + JSON.stringify($grid.jqGrid("getLocalRow", p.selarrrow[i]))); } }); 

演示http://jsfiddle.net/OlegKi/y9KHY/93/在输入数据中使用id属性。

然而,通常允许使用不完整的输入数据而不指定rowid。 因此,上面描述的free jqGrid的行为是一个bug。 错误已在GitHub上的免费jqGrid代码中得到修复。 您可以在演示http://jsfiddle.net/OlegKi/y9KHY/94/中validation它,它直接使用GitHub中的代码。 我计划很快发布下一个版本。