【问题标题】:handling null datetime in gridview在gridview中处理空日期时间
【发布时间】:2014-05-15 17:30:55
【问题描述】:

我在 C# asp.net Web 4.5 框架中有一个 gridview,它可以很好地工作,直到为我正在格式化为日期的字段传递空值..

这是我的模板字段

<asp:templatefield>
    <HeaderTemplate>
        <asp:Label ID="lblHeadEmailFirstSendDate" runat="server" Text="1st Email<br />Target Date"></asp:Label>
    </HeaderTemplate>
    <ItemTemplate>
        <asp:Label ID="lblEmailFirstSendDate" runat="server" Text='<%#  Convert.ToDateTime(Eval("EmailTargetFirstSendDate")).ToString("MM/dd/yyyy")%>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:Label runat="server"  ID="txtEmailFirstSendDate" Text='<%#Convert.ToDateTime(Eval("EmailTargetFirstSendDate")).ToString("MM/dd/yyyy")%>'></asp:Label>
    </EditItemTemplate>
</asp:templatefield>

我搜索了高和低以找到一个解决方案,它既允许我格式化日期并且在日期为空时不会生成异常。

【问题讨论】:

    标签: c# exception datagridview asp.net-4.5


    【解决方案1】:

    给你:

    <%#  Eval("EmailTargetFirstSendDate") != null ? Convert.ToDateTime(Eval("EmailTargetFirstSendDate")).ToString("MM/dd/yyyy") : "No Date" %>
    

    【讨论】:

    • 我无法让它工作......它告诉我页面加载时出现语法错误 - 它正在寻找一个“。”我最终使用后面的代码用 DateTime.TryParse() 测试 null 并传回一个空字符串,如果它是 null
    • 哦,对...它正在寻找一个:...我把它贴错了。对不起,我已经更新了我上面的帖子。把它交给另一个人也没问题。
    • 感谢更新——这是一种更好的方式!给予您信任,因为这是(恕我直言)最好的答案 - 可能会让其他人免于自己解决这个问题的痛苦。
    【解决方案2】:

    好的...我找到了一个很好的解决方案(几乎在发布后立即)感谢 MaxOvrdr 的回答,但我无法让它工作。当 Stan 将我推向正确的方向时,我称赞他。

    我在后面添加了代码:

        protected string GetDate(object  strDt)
        {
            DateTime dt1;
            if (DateTime.TryParse(strDt.ToString(), out dt1))
            {
    
                return dt1.ToString("MM/dd/yyyy");
            }
            else
            {
                return "";
            }
    
    
        }`
    

    并将模板文本字段修改为:

    <asp:TemplateField > <HeaderTemplate> <asp:Label ID="lblHeadEmailFirstSendDate" runat="server" Text="1st Email<br />Target Date"></asp:Label> </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblEmailFirstSendDate" runat="server" Text='<%# GetDate(Eval("EmailTargetFirstSendDate"))%>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:Label runat="server" ID="txtEmailFirstSendDate" Text='<%# GetDate(Eval("EmailTargetFirstSendDate"))%>'></asp:Label> </EditItemTemplate> </asp:TemplateField>

    就像魔术一样......它有效!谢谢大家。

    【讨论】:

      【解决方案3】:

      使用类型DateTime? 这将允许您将 null 分配给它

      添加问号将其变为可空类型

      在代码后面绑定数据?在RowDataBound 事件中

      【讨论】:

      • 我将它绑定在代码隐藏中(不知道我能做到这一点)......请参阅下面的答案......当你让我朝着正确的方向前进时,我会给予你信任。
      猜你喜欢
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多