我有一个jqGrid,它正在调用一个url来填充数据。我使用json作为数据类型。我需要一些我不想显示在网格中的每一行的信息。所以我带来了一个json,它的属性比列多。但当我这样做时:
jQuery("#gridId").getRowData("2");
我只能看到与列相关联的数据。我如何在json中拥有和查询我不想在网格中显示的数据。
例如,我在JSON 中
{
Id: 2,
Name: Pepe,
Profession: Doctor
}
我只想看到网格中的两列,Id和Name,但我想知道每一行客户端的专业知识。
解决方案将取决于需要显示的行总数。如果行数不多(例如小于1000或小于10000),则最佳选择是一次从服务器返回所有数据。您应该添加loadonce: true
选项来通知jqGrid读取所有数据,并将其保存在内部data
和_index
参数中。下一个重要步骤是将页面大小设置得不那么大,例如10、20或25。jqGrid将在从服务器加载所有数据后显示数据的第一个页面。默认情况下,jqGrid要求服务器返回排序的数据对应于sortname
和sortorder
参数,这些参数将作为sidx
和sortd
发送给服务器。另一方面,可以使用附加选项forceClientSorting: true
强制jqGrid在显示第一页之前对数据进行排序和筛选。
如果选择了上述场景,则可以使用additionalProperties
选项为从服务器返回的每一行数据保存附加信息。例如,如果要保存每个数据项中存在的Profession
属性的值,则可以使用additionalProperties: ["Profession"]
选项。之后,您可以使用getLocalRow
通过id访问数据。方法getLocalRow
的工作速度与getRowData
快得多,因为它只返回对内部行对象的引用,该引用是从服务器响应中读取的。它包含来自colModel
的所有name
属性和来自additionalProperties
的属性。
演示https://jsfiddle.net/OlegKi/g8ffxpv2/2/演示了该方法。
您还询问了如何根据内容在某些行上设置title
。我建议您使用rowattr
设置行的任何属性(title
、class
、style
等)查看答案或使用cellattr
(查看答案或此答案)。
只有当加载非常大的数据并且不能使用loadonce: true
选项时,才可以定义伪隐藏列,如{name: "Profession", hidden: true}
而不是使用additionalProperties
。这种方法效果不太好,但会奏效的。顺便说一句,additionalProperties
中使用的属性值可以具有任何类型。例如,可以在主数据阵列的每个项中包括属性(details
、subgrid
)中的子网格数据。隐藏列不允许加载复杂的数据,因为数据不喜欢不仅被引导,而且被保存为隐藏列中的字符串(在列的<td>
元素中)。
如果您使用的是Oleg的免费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的免费jqgrid,我强烈建议你这样做,因为你最终会更快乐,他会给予你很好的支持。但是,如果您没有使用他的网格,而使用的是jqgrid的4.6版本,那么无论显示的列是什么,您仍然可以使用var allData = theGrid.jqGrid("getGridParam").data;
从网格中获取所有数据。
使用免费jqgrid的示例4.13.1:小提琴
使用jqgrid 4.6的示例:小提琴
从Oleg的评论中添加:json数据类型的DEMO