2012-01-07 39 views
3

我正在使用jqGrid treegrid,并且我想根据单元格(它的整数)中的数据值格式化列的背面颜色:我如何从jqGrid列的单元格值为背景执行条件格式

下面是一个例子,我设置列:

   { 
       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"'; 
        } 

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

回答

2

我明白这个问题。我建议Tony对jqGrid代码进行一些更改。通常在代码中修改the place足以填充第一个rd,然后在下一个循环中调用addCell并将rd作为附加参数。功能addCell可以将信息转发给formatColformatCol可以通过附加参数rd调用cellattr,该附加参数将具有与您一样的完全相同格式的信息。

尽管如此,一个人可以相对容易地得到几乎相同的结果,你需要在没有任何jqGrid代码的变化。要做到这一点,可以构造地图对象,它可以根据名称为我们提供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可以在代码中的一些修改后可改为免费。

您可以看到相应的演示here

相关问题