嗯......首先,我需要如何更改colmodel,这是一个调用SELECT的函数,因为我的网格有句点并且有一个选择(成本和吨)的变化。
这是我的GRID
$("#grid").jqGrid({
.......
.......
url:'example1.json',
datatype: "json",
colNames: NAMESCOL,
colModel: MODEL,
.......
.......
caption:"Example 1"
});
其中NAMESCOL和MODEL是:
var NAMESCOL = ["plant","town","name plant","Total","period1","period2","period3"];
var MODEL = [{name:'id_plant',index:'id_plant',width: 40},
{name:'id_town',index:'id_town',width: 80},
{name:'name_plant',index:'name_plant',width: 110},
{name:'tot_ton',index:'tot_ton',width: 50},
{name:'ton_per1',index:'ton_per1',width: 50},
{name:'ton_per2',index:'ton_per2',width: 50},
{name:'ton_per3',index:'ton_per3',width: 50}];
var MODEL2 = [{name:'id_plant',index:'id_plant',width: 40},
{name:'id_town',index:'id_town',width: 80},
{name:'name_plant',index:'name_plant',width: 110},
{name:'tot_cost',index:'tot_ton',width: 50},
{name:'cost_per1',index:'cost_per1',width: 50},
{name:'cost_per2',index:'cost_per2',width: 50},
{name:'cost_per3',index:'cost_per3',width: 50}];
我的功能是:
function CHANGE(){
.......
.......
jQuery('#grid').jqGrid('clearGridData');
jQuery('#grid').jqGrid('setGridParam', {colModel: MODEL2});
jQuery('#grid').trigger('reloadGrid');
}
并尝试使用jQuery('#grid')。jqGrid('setGridParam',{data:MODEL2});但只刷新相同的信息。
:(
答案 0 :(得分:0)
您没有包含从服务器返回的"JSON"
数据的格式。数据的一个例子可以清除很多东西。此外,对datatype
,loadonce
和jsonReader
等其他参数的了解也非常重要。无论如何,我可以给你一些建议来解决你的问题。
首先,我建议您不要在index
中指定任何colModel
属性。如果未指定index
属性,则jqGrid通过复制index
属性的值来生成name
属性。 index
和name
属性的不同值,如
{name:'tot_cost',index:'tot_ton',width: 50}
通常是错误。
秒,name
项的colModel
属性的值将用于构造内部jqGrid结构的id
属性以及jqGrid使用的一些内部JavaScript对象的属性。 name
属性的值只需不同(唯一)。要从JSON输入读取列的数据,jqGrid使用jsonmap
属性(有一些例外)。仅当jsonmap
中未定义colModel
属性时,才会使用name
属性而不是jsonmap
。
因此,如果jqGrid的JSON输入(通常是rows
部分)主要来自像
{"id_plant": ..., "id_town": ..., "name_plant": ..., "tot_ton": ..., ...}
你可以使用
jsonReader: {repeatitems: false}, // it can be skipped starting with jqGrid 4.4.5
colModel: [
{ name: "id_plant", width: 40 },
{ name: "id_town", width: 80 },
{ name: "name_plant", width: 110 },
{ name: "tot_ton" },
{ name: "ton_per1" },
{ name: "ton_per2" },
{ name: "ton_per3" }
]
cmTemplate: { width: 50 }, // default properties for colModel items
...
或者例如
jsonReader: {repeatitems: false}, // it can be skipped starting with jqGrid 4.4.5
colModel: [
{ name: "c1", jsonmap: "id_plant", width: 40 },
{ name: "c2", jsonmap: "id_town", width: 80 },
{ name: "c3", jsonmap: "name_plant", width: 110 },
{ name: "c4", jsonmap: "tot_ton" },
{ name: "c5", jsonmap: "ton_per1" },
{ name: "c6", jsonmap: "ton_per2" },
{ name: "c7", jsonmap: "ton_per3" }
]
cmTemplate: { width: 50 }, // default properties for colModel items
...
重要的是要理解,更改name
colModel
属性的值非常困难(例如在setColProp
回调中使用beforeProcessing
方法),但您可以任何时候更改jsonmap
属性的值或将jsonmap
属性的值指定为函数。例如,tot_ton
的{{1}}列的以下定义可以解决您当前的问题:
colModel
尝试从输入数据项中读取{
name: "tot_ton",
jsonmap: function (obj) {
return obj.tot_ton || obj.tot_cost;
}
}
。如果tot_ton
的值未定义(或tot_ton
或null
),则将使用0
的值。取决于obj.tot_cost
的数据类型(例如,如果它的值是整数,可以是tot_ton
),可以更好地使用以下0
:
jsonmap
我建议您阅读this和this个答案,这些答案显示了如何根据服务器返回的JSON数据调整某些网格选项。如果您在{
name: "tot_ton",
jsonmap: function (obj) {
return obj.tot_ton !== undefined ? obj.tot_ton : obj.tot_cost;
}
}
回调中进行此类调整,则将使用新设置完成服务器响应的处理。在这种方式中你可以使jqGrid真正具有动力。