Обработка нулевой даты и времени в 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
событие