2013-11-15 6 views
1

Я видел приличное количество информации, относящейся к условному форматированию, но, похоже, не может заставить ее работать. Я хочу сделать шрифт ячейки красным, когда это значение (которое является датой) в прошлом.jqGrid - условно форматировать ячейку на основе значения даты

Это общее представление о том, что у меня сейчас:

{ 
       name: 'IsoDate', index: 'IsoDate', align: 'left', sorttype: 'date', datefmt: "m/d/Y", 
       formatter: function (cellvalue, options, rowobject) { var now = new Date(); if (cellvalue < now) { return '<span class="error">' + cellvalue + '</span>'; } else { cellvalue; } } 
      } 

Я не могу заставить его работать, хотя. Я получил его, чтобы вернуть все красные значения или все неопределенные значения. Есть поля, в которых нет дат.

Буду признателен за любую помощь! Благодаря!

UPDATE:

Вот код, который я использовал, что в конечном итоге работает. Я действительно ссылался на другой столбец для даты.

cellattr: function (rowid, val, rawObject, cm, rdata) { 
        var idate = new Date(rawObject['IsoDate']); 
        return (idate < new Date()) ? ' class = "ui-state-error-text"' : ' class = "field-validation-green"'; 
       } 
+0

Лучше использовать синтаксис 'rawObject.IsoDate' вместо' rawObject ['IsoDate'] ' – Oleg

ответ

5

Это лучше использовать cellattr вместо custom formatter. В случае, если вы все еще можете использовать predefined formatter, например formatter: "date", и просто установите дополнительный атрибут style или class на выбранные ячейки <td>. Например, класс ui-state-error-text кажется мне хорошим выбором, чтобы сделать шрифт ячейки красным. Таким образом, определение столбца может быть

{ 
    name: "IsoDate", sorttype: "date", 
    formatter: "date", formatoptions: {newformat: "m/d/Y"}, 
    cellattr: function (cellvalue) { 
     return (cellvalue < new Date()) ? ' class="ui-state-error-text"' : ''; 
    } 
} 

Я не уверен, какие данные у вас в качестве входных данных и является ли код, который вы публикуемым правильно работает. При необходимости вы можете изменить приведенный выше код в соответствии с форматом cellvalue, который у вас есть.

См. the answer, this one, this one и многие другие примеры использования cellattr.

+0

Я думаю, что это может быть просто неверно оценивать сравнение дат. Я не уверен на 100%, потому что он смотрит на js viewmodel, где isodate определяется как Date. – mrshickadance

+0

@mrshickadance: Не важно, как вы храните данные на сервере. Важно, как вы заполняете jqGrid данными. Не могли бы вы привести пример «cellvalue», который у вас есть внутри 'cellattr'. Например, вы можете включить «alert (typeof cellvalue)» и «alert (cellvalue)» или просто установить точку останова внутри обратного вызова «cellattr» и изучить тип и значение «cellvalue». – Oleg

+0

Одна вещь, которую я изменил, - это параметры; cellattr: function (rowid, val). Если я сделаю предупреждение в val, тип будет строкой, а 11/20/2013 станет примером возвращаемого значения. – mrshickadance

0

Вы не указали ключевое слово return в условном выражении. Вот почему вы видите только «красные» значения.

Использование:

else { return cellvalue; } 

вместо:

else { cellvalue; } 
Смежные вопросы