Как я могу получить значение ячейки из столбца jqGrid, чтобы сделать условное форматирование для backcolor - PullRequest
3 голосов
/ 07 января 2012

Я использую 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"';
                     }

я хотел бы повторно использовать эту логику, поэтому я не хочу индексировать в rawObject и выяснять, какой столбец я использую.Я надеялся, что есть способ сделать что-то вроде этого:

       if (rawObject.missingBooks > 0) {
                         return 'style="background-color:#FFCCCC"';
                     }

, но это, похоже, не определено.Таким образом, если я добавляю новый столбец, мне не нужно переиндексировать весь этот код условного форматирования.

1 Ответ

2 голосов
/ 08 января 2012

Я понимаю проблему. Я предложил Тони внести некоторые изменения в код jqGrid. В большинстве случаев достаточно изменить место в коде, чтобы сначала заполнить 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 может быть изменен после некоторой модификации в коде.

Вы можете увидеть соответствующую демонстрацию здесь .

...