2012-01-07 11 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に変更するだけで十分です。 addCellformatColに情報を転送することができ、formatColcellattrを追加パラメータrdと呼ぶことができます。これには、あなたと同じ形式の情報が正確に表示されます。

しかし、jqGridコードを変更しなくても、ほとんど同じ結果が得られます。これを行うには、名前に基づいてrawObjectの列のインデックスを与えるマップオブジェクトを作成するだけです。

たとえば、マップがまだ塗りつぶされていない場合は、beforeRequestまたはbeforeProcessingを使用して地図を埋め込むことができます。コードは、だから、コードがインデックス11は、コード内のいくつかの変更後に変更することができますrawObject[11]のようなインデックスの使用から自由になります

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; 
      } 
     } 
    } 
}); 

のように見えることができます。

対応するデモhereが表示されます。

関連する問題