如何使用clearGridData,setGridParam和reloadGrid更改ColModel的函数? JAVASCRIPT / HTML

时间:2013-11-07 19:25:09

标签: javascript html json jqgrid reload

嗯......首先,我需要如何更改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});但只刷新相同的信息。

:(

1 个答案:

答案 0 :(得分:0)

您没有包含从服务器返回的"JSON"数据的格式。数据的一个例子可以清除很多东西。此外,对datatypeloadoncejsonReader等其他参数的了解也非常重要。无论如何,我可以给你一些建议来解决你的问题。

首先,我建议您不要在index中指定任何colModel属性。如果未指定index属性,则jqGrid通过复制index属性的值来生成name属性。 indexname属性的不同值,如

{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_tonnull),则将使用0的值。取决于obj.tot_cost的数据类型(例如,如果它的值是整数,可以是tot_ton),可以更好地使用以下0

jsonmap

我建议您阅读thisthis个答案,这些答案显示了如何根据服务器返回的JSON数据调整某些网格选项。如果您在{ name: "tot_ton", jsonmap: function (obj) { return obj.tot_ton !== undefined ? obj.tot_ton : obj.tot_cost; } } 回调中进行此类调整,则将使用新设置完成服务器响应的处理。在这种方式中你可以使jqGrid真正具有动力。