我在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
列的填充,您有两种主要的实现方法:
- 自定义格式化程序的使用
-
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
接收从服务器返回的数据作为对象,回调可以修改它。可以用同样的方法添加其他属性