【问题标题】:jqGrid - Conditionally format cell based off Date valuejqGrid - 根据日期值有条件地格式化单元格
【发布时间】:2013-11-29 03:57:26
【问题描述】:

我已经看到了大量关于条件格式的信息,但似乎无法让它发挥作用。当单元格的值(即日期)在过去时,我想将单元格的字体设为红色。

这是我现在所拥有的大致概念:

{
              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"';
              }

【问题讨论】:

  • 最好使用rawObject.IsoDate语法而不是rawObject['IsoDate']

标签: jquery jqgrid jqgrid-asp.net


【解决方案1】:

最好使用cellattr 而不是custom formatter。在这种情况下,您仍然可以像formatter: "date" 一样使用predefined formatter,只需在选定的&lt;td&gt; 单元格上设置额外的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 用法示例。

【讨论】:

  • 我认为它可能只是没有正确评估日期比较。我不是 100% 确定为什么,因为它正在查看一个 js 视图模型,其中 isodate 被定义为一个日期。
  • @mrshickadance:如何在服务器上保存数据并不重要。如何用数据填充 jqGrid 很重要。您能否在cellattr 中包含cellvalue 的示例。例如,您可以包含alert(typeof cellvalue)alert(cellvalue),或者只是在cellattr 回调中设置断点并检查cellvalue 的类型和值。
  • 我改变的一件事是参数; cellattr:函数(rowid,val)。如果我对 val 发出警报,则类型是字符串,11/20/2013 将是返回值的示例。
  • @mrshickadance:因此您可以使用valueParts = cellvalue.split("/")cellvalue"11/20/2013" 转换为数组["11", "20", "2013"]。现在您可以针对构造函数new Date(year, month, day, hours, minutes, seconds, milliseconds); 构造Date 对象:new Date(Number(valueParts[2]), Number(valueParts[0])-1, Number(valueParts[1]))
  • 感谢您的提示。我只是好奇,因为比较一些简单的日期似乎很复杂,为什么日期不比较?我用 (var valDate = new Date(val)) 将传入的 val 更改为日期对象。该类型是一个对象,它以长日期格式打印出来,与 new Date() 一样......为什么在比较时它们似乎不能一起工作?
【解决方案2】:

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

用途:

else { return cellvalue; }

代替:

else { cellvalue; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2013-07-03
    相关资源
    最近更新 更多