在gridview中处理null datetime

时间:2014-05-15 17:30:56

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

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

这是我的模板字段

<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>

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

3 个答案:

答案 0 :(得分:3)

你走了:

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

答案 1 :(得分:2)

好的......我找到了一个很好的解决方案(几乎立即发布)感谢MaxOvrdr的答案,但我无法让它发挥作用。我给了斯坦信用,因为他朝着正确的方向推动了我。

我添加了代码:

    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>

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

答案 2 :(得分:1)

使用类型DateTime? 这将允许您为其分配空值

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

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