我想其他人也会对同样的问题感兴趣。所以我对这个问题+1。
您至少可以通过两种方式解决该问题。您可以使用的第一个数据类型:“jsonstring” http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_string and datastr: data
。如果您需要添加附加参数jsonReader: { repeatitems: false }
.
第二种方法是使用datatype: "local"
and data: data.rows
。在这种情况下本地阅读器 http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#array_data将用于读取数据data.rows
大批。默认localReader
可以读取数据。
对应的demo是here http://www.ok-soft-gmbh.com/jqGrid/AddJsonData.htm and here http://www.ok-soft-gmbh.com/jqGrid/AddJsonData1.htm.
我修改了一些您的数据:填充“名称”列并在输入数据中包含第三项。
现在您可以使用本地分页、排序和过滤/搜索数据。我添加了更多代码来演示这些功能。下面是演示中的代码:
$(document).ready(function () {
'use strict';
var data = {
"page": "1",
"records": "3",
"rows": [
{ "id": "83123a", Name: "Name 1", "PackageCode": "83123a" },
{ "id": "83432a", Name: "Name 3", "PackageCode": "83432a" },
{ "id": "83566a", Name: "Name 2", "PackageCode": "83566a" }
]
},
grid = $("#packages");
grid.jqGrid({
colModel: [
{ name: 'PackageCode', index: 'PackageCode', width: "110" },
{ name: 'Name', index: 'Name', width: "300" }
],
pager: '#packagePager',
datatype: "jsonstring",
datastr: data,
jsonReader: { repeatitems: false },
rowNum: 2,
viewrecords: true,
caption: "Packages",
height: "auto",
ignoreCase: true
});
grid.jqGrid('navGrid', '#packagePager',
{ add: false, edit: false, del: false }, {}, {}, {},
{ multipleSearch: true, multipleGroup: true });
grid.jqGrid('filterToolbar', { defaultSearch: 'cn', stringResult: true });
});
UPDATED:我决定添加更多关于之间差异的细节datatype: "jsonstring"
and datatype: "local"
场景,因为旧答案被许多读者阅读和投票。
我建议稍微修改一下上面的代码以更好地显示差异。第一个代码使用datatype: "jsonstring"
$(function () {
"use strict";
var data = [
{ id: "10", Name: "Name 1", PackageCode: "83123a", other: "x", subobject: { x: "a", y: "b", z: [1, 2, 3]} },
{ id: "20", Name: "Name 3", PackageCode: "83432a", other: "y", subobject: { x: "c", y: "d", z: [4, 5, 6]} },
{ id: "30", Name: "Name 2", PackageCode: "83566a", other: "z", subobject: { x: "e", y: "f", z: [7, 8, 9]} }
],
$grid = $("#packages");
$grid.jqGrid({
data: data,
datatype: "local",
colModel: [
{ name: "PackageCode", width: 110 },
{ name: "Name", width: 300 }
],
pager: "#packagePager",
rowNum: 2,
rowList: [1, 2, 10],
viewrecords: true,
rownumbers: true,
caption: "Packages",
height: "auto",
sortname: "Name",
autoencode: true,
gridview: true,
ignoreCase: true,
onSelectRow: function (rowid) {
var rowData = $(this).jqGrid("getLocalRow", rowid), str = "", p;
for (p in rowData) {
if (rowData.hasOwnProperty(p)) {
str += "propery \"" + p + "\" + have the value \"" + rowData[p] + "\n";
}
}
alert("all properties of selected row having id=\"" + rowid + "\":\n\n" + str);
}
});
$grid.jqGrid("navGrid", "#packagePager",
{ add: false, edit: false, del: false }, {}, {}, {},
{ multipleSearch: true, multipleGroup: true });
$grid.jqGrid("filterToolbar", { defaultSearch: "cn", stringResult: true });
});
它显示(参见the demo http://www.ok-soft-gmbh.com/jqGrid/AddJsonData_.htm)
有人能看见unsorted项目的顺序与输入数据相同。输入数据的项目将保存在内部参数中data
and _index
. getLocalRow
方法中使用的onSelectRow
显示内部项目data
仅包含名称对应的输入项的属性name
一些 jqGrid 列的属性。另外不需要的_id_
将添加属性。
另一方面下一个演示 http://www.ok-soft-gmbh.com/jqGrid/AddJsonData1_.htm它使用datatype: "local"
显示sorted数据和所有属性(包括复杂对象)仍将保存在内部data
:
上一个演示中使用的代码如下:
$(function () {
"use strict";
var data = [
{ id: "10", Name: "Name 1", PackageCode: "83123a", other: "x", subobject: { x: "a", y: "b", z: [1, 2, 3]} },
{ id: "20", Name: "Name 3", PackageCode: "83432a", other: "y", subobject: { x: "c", y: "d", z: [4, 5, 6]} },
{ id: "30", Name: "Name 2", PackageCode: "83566a", other: "z", subobject: { x: "e", y: "f", z: [7, 8, 9]} }
],
$grid = $("#packages");
$grid.jqGrid({
data: data,
datatype: "local",
colModel: [
{ name: "PackageCode", width: 110 },
{ name: "Name", width: 300 }
],
pager: "#packagePager",
rowNum: 2,
rowList: [1, 2, 10],
viewrecords: true,
rownumbers: true,
caption: "Packages",
height: "auto",
sortname: "Name",
autoencode: true,
gridview: true,
ignoreCase: true,
onSelectRow: function (rowid) {
var rowData = $(this).jqGrid("getLocalRow", rowid), str = "", p;
for (p in rowData) {
if (rowData.hasOwnProperty(p)) {
str += "propery \"" + p + "\" + have the value \"" + rowData[p] + "\"\n";
}
}
alert("all properties of selected row having id=\"" + rowid + "\":\n\n" + str);
}
});
$grid.jqGrid("navGrid", "#packagePager",
{ add: false, edit: false, del: false }, {}, {}, {},
{ multipleSearch: true, multipleGroup: true });
$grid.jqGrid("filterToolbar", { defaultSearch: "cn", stringResult: true });
});
所以我建议使用datatype: "local"
代替datatype: "jsonstring"
. datatype: "jsonstring"
仅在某些非常特定的情况下才有一些优势。