设置数据 属性 时 jqGrid getLocalRow 返回 false
jqGrid getLocalRow returning false when data property is set
使用 getLocalRow
和数据 属性
时遇到问题
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
属性 并且有一个值为 1 的列有 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。因此,上面描述的免费 jqGrid 行为是一个错误。这些错误已在 GitHub 上的免费 jqGrid 代码中修复。您可以在演示http://jsfiddle.net/OlegKi/y9KHY/94/中验证它,它使用直接来自GitHub的代码。我计划尽快发布下一个版本。
使用 getLocalRow
和数据 属性
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
属性 并且有一个值为 1 的列有 key: true
属性想用作rowid。如果您遵守规则,那么您报告的问题将不存在。请参阅使用代码
$("#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。因此,上面描述的免费 jqGrid 行为是一个错误。这些错误已在 GitHub 上的免费 jqGrid 代码中修复。您可以在演示http://jsfiddle.net/OlegKi/y9KHY/94/中验证它,它使用直接来自GitHub的代码。我计划尽快发布下一个版本。