Обработка нулевой даты и времени в gridview

У меня есть gridview в C# asp.net Web 4.5 Framework, который прекрасно работает до тех пор, пока для поля, которое я форматирую как дату, будет передано значение 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 ответа

Решение

Ну вот:

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

Хорошо... Я нашел хорошие решения (почти сразу после публикации) Спасибо 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>

И, как магия... это работает!!! Спасибо всем.

Используйте тип DateTime?Это позволит вам присвоить ему значение null

Добавление знака вопроса превращает его в обнуляемый тип

Привязать данные в коде позади? в RowDataBound событие

Другие вопросы по тегам