我有一个调用url来填充数据的jqGrid。我使用json作为数据类型。 我需要一些我不希望在网格中显示的行的信息。所以我带来的json具有比列更多的属性。 但是当我这样做时:
jQuery("#gridId").getRowData("2");
我只能看到与列相关联的数据。如何在json中查询并查询我不希望在网格中显示的数据。
例如我有JSON
{
Id: 2,
Name: Pepe,
Profession: Doctor
}
我只想在网格中看到两列,Id和Name,但我想知道每一行在客户端的专业知识。
答案 0 :(得分:2)
解决方案取决于您需要显示的总行数。如果行数不大(例如小于1000或小于10000),那么最好的选择是立即返回来自服务器的所有数据。您应添加loadonce: true
选项以通知jqGrid读取所有数据并将其保存在内部data
和_index
参数中。下一个重要步骤是设置页面大小不要太大,例如10,20或25. jqGrid将在加载所有数据之后显示第一个页数据服务器。默认情况下,jqGrid要求服务器返回已排序数据对应sortname
和sortorder
参数,这些参数将作为sidx
和{{1}发送到服务器}。另一方面,可以使用附加选项sortd
强制免费jqGrid在显示第一页之前对数据进行排序和过滤。
如果选择了上述方案,则可以使用forceClientSorting: true
选项为服务器返回的每一行数据保存附加信息。例如,如果您希望保存每个数据项中存在的additionalProperties
属性值,则可以使用Profession
选项。之后,您可以使用additionalProperties: ["Profession"]
按ID访问数据。方法getLocalRow
与getLocalRow
的工作速度非常快,因为它只返回对内部行对象的引用,该引用是从服务器响应中读取的。它包含getRowData
中的所有name
属性和colModel
中的属性。
演示https://jsfiddle.net/OlegKi/g8ffxpv2/2/演示了这种方法。
您还询问了如何根据内容在某些行上设置additionalProperties
。我建议您使用title
设置该行的任何属性(rowattr
,title
,class
等等),请参阅the answer或使用style
(请参阅the answer或this one)。
只有当一个人加载了非常大的数据且一个人无法使用cellattr
选项时,才能定义虚拟隐藏列,例如loadonce: true
而非使用{name: "Profession", hidden: true}
。这种方式效果较差,但它会起作用。顺便说一句,additionalProperties
中使用的属性值可以任何类型。例如,可以在属性(additionalProperties
,details
)中的子网格数据的主数据数组的每个项目中包括。隐藏列不允许加载复杂数据,因为数据不仅仅是含铅,而是保存为隐藏列中的字符串(在列的subgrid
元素中)。
答案 1 :(得分:1)
如果你使用Oleg的free-jqgrid并且版本是最新的那么你会这样做:
var theGrid = $("#grid");
var myData = [
{
"Id": 1,
"Name": "John",
"Profession": "Doctor"
},
{
"Id": 2,
"Name": "Pepe",
"Profession": "Doctor"
},
{
"Id": 2,
"Name": "Jane",
"Profession": "Nurse"
}
];
theGrid.jqGrid({
data : myData,
colNames: ['Id', 'Name'],
colModel: [
{name: 'Id'},
{name: 'Name'}
]
});
var allData = theGrid.jqGrid("getGridParam").data;
console.log(JSON.stringify(allData));
//show Pepe's Profession:
$.each(allData, function(i, v){
if(v.Name === "Pepe")
alert(v.Profession);
});
如果你没有使用Oleg的free-jqgrid,我强烈建议你这样做,因为你最终会更开心,并给予他非常好的支持。但是,如果您没有使用他的网格并且使用的是jqgrid版本4.6,那么无论您显示什么列,您仍然可以使用var allData = theGrid.jqGrid("getGridParam").data;
从网格获取所有数据。
使用free-jqgrid 4.13.1的示例: FIDDLE
使用jqgrid 4.6的示例: FIDDLE
从Oleg的评论中添加: DEMO for json datatype