如何获得基于其他两列值计算的jqgrid中的第三行值



我在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];
    }

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

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

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

列使用formatter: "interger"

在使用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接收从服务器返回的数据作为对象,回调可以修改它。可以用同样的方法添加其他属性

最新更新