如何从jqGrid列获取单元格值来为backcolor执行条件格式设置

我正在使用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"'; } 

但这似乎是不确定的。 这样,如果我添加一个新列,我不必重新索引所有这些条件格式代码。

我理解这个问题。 我建议Tony在jqGrid代码中进行一些更改。 大多数情况下修改代码中的位置以填充第一个rd然后在下一个for循环调用addCell使用rd作为附加参数就addCell了。 addCell函数可以将信息转发到formatCol ,而formatCol可以使用附加参数rd调用cellattr ,它将具有与您想要的格式完全相同的信息。

然而,如果没有jqGrid代码中的任何更改,您可以相对容易地获得几乎相同的结果。 要做到这一点,可以构建map对象,它可以根据名称为rawObject列的索引。

例如,如果尚未填充,我们可以使用beforeProcessingbeforeProcessing来填充地图。 代码看起来像

 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可以在代码中进行一些修改后进行更改。

您可以在此处查看相应的演示。