2013-11-15 101 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; } } 
      } 

我似乎无法得到它的工作,虽然。我已经得到它返回所有的红色值,或所有未定义的值。有一些没有日期的领域。

我很感激任何帮助!谢谢!

更新:

这是我使用的代码,最终工作。我实际上是在引用日期的另一列。

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",并在所选的<td>单元上设置附加的styleclass属性。例如类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 answerthis onethis one和许多其他更多示例使用cellattr

+0

我认为它可能只是不正确地评估日期比较。我不是100%确定为什么,因为它正在查看isodate被定义为Date的js viewmodel。 – mrshickadance

+0

@mrshickadance:如何在服务器上保存数据并不重要。如何用数据填充jqGrid很重要。你能否在cellattr中加入一个'cellvalue'的例子。例如,您可以包含'alert(typeof cellvalue)'和'alert(cellvalue)',或者只在'cellattr'回调中设置断点并检查'cellvalue'的类型和值。 – Oleg

+0

我做过的一件事是参数; cellattr:函数(rowid,val)。如果我在val上做了一个警报,类型是字符串,并且11/20/2013将是一个返回值的示例。 – mrshickadance

0

您在条件语句中缺少return关键字。这就是为什么你只看到“红色”的价值。

用途:代替

else { return cellvalue; } 

else { cellvalue; } 
相关问题