我正在使用jqGrid treegrid,我想根据单元格中数据的值(它是一个整数)格式化列的背面颜色:
以下是我设置列的示例:
{
name: 'missingBooks',
cellattr: function (rowId, tv, rawObject, cm, rdata) {
//conditional formatting
if (rawObject[11] > 0) {
return 'style="background-color:#FFCCCC"';
}
},
width: 75,
unformat: originalValueUnFormatter,
formatter: missingBooksFormatter,
align: "right",
index: 'missingBooks',
hidden: false,
sorttype: 'int',
sortable: true
},
这很好但我的问题是在cellAttr回调中。在此条件格式行中:
if (rawObject[11] > 0) {
return 'style="background-color:#FFCCCC"';
}
我想重用这个逻辑,所以我不想索引到rawObject并找出我正在使用的列。我希望有办法做这样的事情:
if (rawObject.missingBooks > 0) {
return 'style="background-color:#FFCCCC"';
}
但这似乎未定义。这样,如果我添加一个新列,我不必重新索引所有这些条件格式代码。
答案 0 :(得分:2)
我理解这个问题。我建议Tony在jqGrid代码中进行一些更改。大多数情况下修改代码中的the place以填充第一个rd
,然后在下一个for循环调用addCell
中填充rd
作为附加参数就足够了。函数addCell
可以将信息转发到formatCol
,而formatCol
可以使用附加参数cellattr
调用rd
,其中信息的格式完全相同像你一样想要。
然而,如果没有jqGrid代码中的任何更改,您可以相对容易地获得几乎相同的结果。要做到这一点,我们可以构建一个map对象,它可以根据名称为我们提供rawObject
中列的索引。
例如,如果地图尚未填充,我们可以使用beforeRequest
或beforeProcessing
填充地图。代码看起来像
var colMap = {};
$("#tree").jqGrid({
...
colModel: [
{name: 'missingBooks',
cellattr: function (rowId, tv, rawObject, cm, rdata) {
//conditional formatting
if (Number(rawObject[colMap.missingBooks]) > 0) {
return ' style="background-color:#FFCCCC"';
} else {
return '';
}
}
...
],
beforeRequest: function () {
if ($.isEmptyObject(colMap)) {
var i, cmi,
cm = $(this).jqGrid('getGridParam', 'colModel'),
l = cm.length;
for (i = 0; i < l; i++) {
cmi = cm[i];
colMap[cmi.name] = i;
}
}
}
});
因此,代码将不再使用像rawObject[11]
这样的索引,其中索引11
可以在代码中进行一些修改后更改。
您可以看到相应的演示here。