2012-01-07 47 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

相關問題