2012-01-07 3 views
3

Я использую jgGrid treegrid, и я хочу отформатировать задний цвет столбцов на основе значения данных в ячейке (целое число):Как я могу получить значение ячейки из столбца jqGrid для выполнения условного форматирования для backcolor

Вот пример, где я настроить колонки:

   { 
       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

Я понимаю проблему. Я предложил Тони внести некоторые изменения в код jqGrid. В основном было бы достаточно изменить the place в коде для заполнения первого rd, а затем в следующем для вызова цикла addCell с rd в качестве дополнительного параметра. Функция addCell может пересылать информацию до formatCol, а formatCol может звонить cellattr с дополнительным параметром rd, который будет иметь информацию в том же формате, что и вы.

Тем не менее можно относительно легко получить почти те же результаты, которые вам нужны без каких-либо изменений в коде jqGrid. Для этого можно просто построить объект карты, который может дать нам индекс столбца в rawObject на основе имени.

Например, мы можем использовать beforeRequest или beforeProcessing, чтобы заполнить карту, если она еще не заполнена. Этот код может выглядит

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.

 Смежные вопросы

  • Нет связанных вопросов^_^