如何从jqGrid列获取单元格值以进行条件格式设置背景颜色

3

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

我希望能够重复使用这个逻辑,因此不想索引到原始对象并找出我正在使用的列。我希望有一种方法可以像这样做:
       if (rawObject.missingBooks > 0) {
                         return 'style="background-color:#FFCCCC"';
                     }

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

2
我理解了问题。我建议Tony在jqGrid代码中进行一些更改。主要是修改代码中的这个位置,先填充第一个rd,然后在下一个循环中使用addCell调用rd作为附加参数。函数addCell可以将信息转发给formatColformatCol可以使用附加参数rd调用cellattr,其中rd将具有与您所需完全相同格式的信息。
尽管如此,我们可以相对容易地获得几乎与您需要的相同结果,而无需更改jqGrid代码。为此,我们只需构建map对象,该对象可以根据名称为我们提供rawObject中列的索引。
例如,我们可以使用beforeRequestbeforeProcessing来填充地图(如果尚未填充)。代码可能如下所示:
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在代码修改后可以更改。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接