【问题标题】:Comparing datetime in gridview eval比较gridview eval中的日期时间
【发布时间】:2015-12-25 22:38:48
【问题描述】:

我在 gridview 中有一个标签,我在其中显示消息发送的日期时间,具体取决于消息是今天发送还是更早发送。如果消息是今天发送的,它应该显示时间,如果它是更早发送的,则显示日期( dd-MM-yyyy)。 SentDateTime 是给出所需日期时间的列。

我已经尝试过以下方法:

<asp:Label ID="lblMsgTime" runat="server" Text='<%# Eval("SentDateTime","{0:dd-MM-yyyy}").Equals(DateTime.Now,"{0:dd-MM-yyyy}")? Eval("SentDateTime","{0:HH:mm}"):Eval("SentDateTime","{0:dd-MM-yyyy}") %>' style="color: #FFFFFF"></asp:Label>

但抛出异常

不能通过实例引用访问成员“object.Equals(object, object)”;改为使用类型名称来限定它

【问题讨论】:

  • 在服务器行数据绑定事件上这样做不是更容易吗?
  • 由于某种原因我不想在这里使用事件所以想按照上面的方法进行
  • 您是否尝试过基本比较 == 而不是 equals
  • 是的,这里错过了 ToString

标签: asp.net datetime gridview eval bind


【解决方案1】:

问题是您忘记在DateTime.Now 上拨打ToString

.Equals(DateTime.Now.ToString("{0:dd-MM-yyyy}"))

然而,这一切都非常复杂。直接比较日期就不用比较字符串了:

<%# (DateTime)Eval("SentDateTime") == DateTime.Now ? ...

对于标记来说,即使这样看起来也太过分了。考虑将此逻辑移至函数背后的代码:

protected string GetDateValue(DateTime sentDateTime)
{
    if (sentDateTime == DateTime.Now)
    {
        return sentDateTime.ToString("HH:mm");
    }
    else
    {
        return sentDateTime.ToString("dd-MM-yyyy");
    }
}

然后这样称呼它:

<%# GetDateValue((DateTime)Eval("SentDateTime")) %>

【讨论】:

  • 虽然我非常确信我必须使用代码隐藏来保持代码干净,但使用代码隐藏还有其他好处吗?上面的工作就像一个魅力顺便说一句
  • @RelatedRhymes,不,一般没有其他好处。尽管可读性很大,但它似乎是唯一的一个。然而,在这种特殊情况下,您将享受到一点点性能提升,因为对Eval 的一次评估(而不是最初的 4 倍)。如果您注意到这一点,我会感到惊讶
猜你喜欢
  • 2012-01-20
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2012-12-29
  • 2012-04-20
相关资源
最近更新 更多