Jquery JqGrid:如何获取所有json数据,而不仅仅是属于某个列的数据?

Jquery JqGrid:如何获取所有json数据,而不仅仅是属于某个列的数据?,jquery,json,jqgrid,Jquery,Json,Jqgrid,我有一个jqGrid,它调用url来填充数据。我使用json作为数据类型。 我需要一些我不想在网格中显示的每一行的信息。因此,我带来了一个属性多于列的json。 但当我这样做的时候: jQuery("#gridId").getRowData("2"); 我只能看到与列相关的数据。如何在json中获取和查询我不想在网格中显示的数据 例如,我在JSON中使用了 { Id: 2, Name: Pepe, Profession: Doctor } 我只想在网格中看到两列,Id和Na

我有一个jqGrid,它调用url来填充数据。我使用json作为数据类型。 我需要一些我不想在网格中显示的每一行的信息。因此,我带来了一个属性多于列的json。 但当我这样做的时候:

jQuery("#gridId").getRowData("2");
我只能看到与列相关的数据。如何在json中获取和查询我不想在网格中显示的数据

例如,我在JSON中使用了

{
   Id: 2,
   Name: Pepe,
   Profession: Doctor
}

我只想在网格中看到两列,Id和Name,但我想知道每行的客户端的专业信息。

如果您使用的是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的评论中添加:

如果您使用的是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的评论中添加:

解决方案取决于需要显示的行总数。如果行数不多(例如小于1000或小于10000),那么最好的选择是一次返回服务器上的所有数据。您应该添加
loadonce:true
选项,通知jqGrid读取所有数据,并将其保存在内部
数据
\u索引
参数中。下一个重要步骤是将页面大小设置为不太大,例如10、20或25。从服务器加载所有数据后,jqGrid将显示第一页数据。默认情况下,jqGrid要求服务器返回的排序数据对应于
sortname
sortorder
参数,这些参数将作为
sidx
sortd
发送到服务器。另一方面,可以使用附加选项
forceClientSorting:true
强制释放jqGrid在显示第一页之前对数据进行排序和过滤

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

演示演示了该方法

您还询问了如何根据内容在某些行上设置
标题。我建议您使用
rowattr
设置行的任何属性(
title
class
style
等等),请参阅或使用
cellatr
(请参阅或)


只有当加载非常大的数据并且不能使用
loadonce:true
选项时,才能定义伪隐藏列,例如
{name:“Profession”,hidden:true}
,而不是用法
附加属性
。这种方法效率较低,但会奏效。顺便说一下,
additionalProperties
中使用的属性值可以有任何类型。例如,可以在属性(
详细信息
子网格
)中的子网格数据的主数据数组的每个项目中包含。隐藏列不允许加载复杂的数据,因为数据不喜欢被引导,而是被保存为隐藏列中的字符串(在列的
元素中)

解决方案取决于需要显示的行总数。如果行数不多(例如小于1000或小于10000),那么最好的选择是一次返回服务器上的所有数据。您应该添加
loadonce:true
选项,通知jqGrid读取所有数据,并将其保存在内部
数据
\u索引
参数中。下一个重要步骤是将页面大小设置为不太大,例如10、20或25。从服务器加载所有数据后,jqGrid将显示第一页数据。默认情况下,jqGrid要求服务器返回的排序数据对应于
sortname
sortorder
参数,这些参数将作为
sidx
sortd
发送到服务器。另一方面,可以使用附加选项
forceClientSorting:true
强制释放jqGrid在显示第一页之前对数据进行排序和过滤

如果选择上述场景,则可以使用
additionalProperties
选项为服务器返回的每一行数据保存附加信息。例如,如果希望保存每个数据项中存在的
Profession
属性的值,则可以使用
additionalProperties:[“Profession”]
o