JqGrid:如何获取所有json数据,而不仅仅是那些属于列的数据



我有一个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要求服务器返回排序的数据对应于sortnamesortorder参数,这些参数将作为sidxsortd发送给服务器。另一方面,可以使用附加选项forceClientSorting: true强制jqGrid在显示第一页之前对数据进行排序和筛选。

如果选择了上述场景,则可以使用additionalProperties选项为从服务器返回的每一行数据保存附加信息。例如,如果要保存每个数据项中存在的Profession属性的值,则可以使用additionalProperties: ["Profession"]选项。之后,您可以使用getLocalRow通过id访问数据。方法getLocalRow的工作速度与getRowData快得多,因为它只返回对内部行对象的引用,该引用是从服务器响应中读取的。它包含来自colModel的所有name属性和来自additionalProperties的属性。

演示https://jsfiddle.net/OlegKi/g8ffxpv2/2/演示了该方法。

您还询问了如何根据内容在某些行上设置title。我建议您使用rowattr设置行的任何属性(titleclassstyle等)查看答案或使用cellattr(查看答案或此答案)。

只有当加载非常大的数据并且不能使用loadonce: true选项时,才可以定义伪隐藏列,如{name: "Profession", hidden: true}而不是使用additionalProperties。这种方法效果不太好,但会奏效的。顺便说一句,additionalProperties中使用的属性值可以具有任何类型。例如,可以在主数据阵列的每个项中包括属性(detailssubgrid)中的子网格数据。隐藏列不允许加载复杂的数据,因为数据不喜欢不仅被引导,而且被保存为隐藏列中的字符串(在列的<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

相关内容

最新更新