如何使用功能改变ColModel,使用clearGridData,setGridParam和rel

2019-10-30 03:31发布

好....首先我需要如何改变colmodel蒙山一个函数,调用一个SELECT,因为我的网有周期,有一个选择(成本和吨)的变化。

这是我的GRID

        $("#grid").jqGrid({
                            .......
                            .......
                            url:'example1.json',
                            datatype: "json",
                            colNames: NAMESCOL,
                            colModel: MODEL,
                            .......
                            .......
                            caption:"Example 1"         
        });

其中NAMESCOL和型号是:

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( '#线')的jqGrid( 'setGridParam',{数据:MODEL2})。 但只刷新相同的信息。

:(

Answer 1:

你不包含格式"JSON"从服务器返回的数据。 数据的例子可以清楚很多事情。 此外其他一些参数,如知识datatypeloadoncejsonReader可能是非常重要的。 以任何方式,我可以给你一些建议,这应有助于解决您的问题。

首先,我建议你不指定任何index的属性colModel 。 如果没有index指定的属性然后jqGrid的,使index由值的复制属性name属性。 针对不同的价值观indexname样性质

{name:'tot_cost',index:'tot_ton',width: 50}

通常一个错误。

秒,值name的属性colModel项将被用于构建id内部的jqGrid结构的属性和由使用的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_toncolModel可以解决你目前的问题:

{
    name: "tot_ton",
    jsonmap: function (obj) {
        return obj.tot_ton || obj.tot_cost;
    }
}

它试图读取tot_ton从输入数据的项目。 如果值tot_ton未定义(或null0 ),那么值obj.tot_cost将被使用。 所述的数据的类型的依赖tot_ton (例如,如果它的值是整数,它可以是0 ),可以更好地使用下面的jsonmap代替:

{
    name: "tot_ton",
    jsonmap: function (obj) {
        return obj.tot_ton !== undefined ? obj.tot_ton : obj.tot_cost;
    }
}

我建议你阅读这和这个答案,这表明一个如何调整基于从服务器返回的JSON数据网格的一些选项。 如果将这样的调整在beforeProcessing回调,则服务器响应的处理会使用新的设置来完成。 在方式可以使真正的jqGrid动力。



文章来源: How to Change the ColModel with a function, using clearGridData,setGridParam and reloadGrid? JAVASCRIPT/HTML