0

我的 jqgrid 中有两个列,我从第三列的 json 获得我必须计算其他两个的值并显示我该怎么做

  jQuery("#vehicleResultGrid").jqGrid({

        data : jsonText,
        datatype : 'local',
        rowNum : 20000,
        width : '100%',
        height : 'auto',
        colNames : [ 'FIN', 'VIN','balnce' ],
        colModel : [{
            name : 'value1',
            sortable:false,
            width : 190,
            classes: "col1"
        },{
            name : 'value2',
            sortable:false,
            width : 190
        },{

            name : 'blance',
            formatter: CalculatedFormatFunction

        }]

    });

     function CalculatedFormatFunction(cellval, opts, rowObject, action) {

           return rowObject[0]*rowObject[1];
    }

我试过这段代码。

4

1 回答 1

1

如果您需要在客户端实现第三blance列的填充,您有两种主要的实现方式:

  1. 自定义格式化程序的使用
  2. beforeProcessing回调的使用。

第二种方法更好,因为您可以为计算列使用一些预定义的格式化程序。例如,您仍然可以formatter: "interger"用于列blance

在使用的情况下datatype: 'local',填充第三列的问题blance真的很简单。您已经输入数据(jsonText原始代码中的变量)作为项目数组。例如,您的输入数据为

var myOrgData = [
        {value1: 2, value2: 3},
        {value1: 5, value2: 7}
    ];

因此,您可以将blance属性添加到输入数组中的所有项目:

var l = myOrgData.length, i, item;
for (i = 0; i < l; i++) {
    item = myOrgData[i];
    item.blance = item.value1 * item.value2;
    // or if the values could be strings then
    // item.blance = parseInt(item.value1, 10) * parseInt(item.value2, 10);
}

您解决问题的方式非常容易,并且可以为blance列使用任何格式化程序。例如,您可以定义blance

{name: "blance", formatter: "integer", sorttype: "integer"}

如果您改用自定义格式化程序

{name: "blance", sorttype: "integer",
    formatter: function (cellValue, option, rowObject) {
        return parseInt(rowObject.value1, 10) * parseInt(rowObject.value2, 10);
    }}

您可以使用未更改的输入数据,但是您不能使用预定义格式化程序的优点,或者您必须手动调用原始格式化程序,这会使代码更复杂且可读性更低。

如果你有datatype: "json"datatype: "xml"比使用beforeProcessing回调非常接近于上面描述的输入数据的简单修改。回调beforeProcessing接收从服务器返回的数据作为对象,回调可以修改它。可以以相同的方式添加其他属性。

于 2013-04-01T15:52:50.023 回答