我有一个填充了文本框的gridview,可以使用此代码格式化日期时间
<asp:TextBox runat="server" id="txtDateTo"
Text='<%#Convert.ToDateTime(Eval("ByPassDateTo")).ToString("MM/dd/yyyy") %>'
Enabled='<%#(String.IsNullOrEmpty(Eval("ByPassDateTo").ToString())
? true
: false) %>' />
代码正在运行,但我遇到的问题是如果textbox.text填充了空值我得到错误
无法将对象从DBNull强制转换为其他类型。
有人可以告诉我这样做的正确方法.. Tnx!
答案 0 :(得分:2)
如果条件与启用的条件相同,则可以使用内联。
请尝试以下代码:
<asp:TextBox runat="server" id="txtDateTo" Text='<%# String.IsNullOrEmpty(Eval("ByPassDateTo").ToString()) ? string.Empty : Convert.ToDateTime(Eval("ByPassDateTo")).ToString("MM/dd/yyyy") %>' Enabled='<%#(String.IsNullOrEmpty(Eval("ByPassDateTo").ToString()) ? true: false) %>' />
由于
答案 1 :(得分:1)
为什么不使用代码隐藏,在我看来,它更具可读性和可维护性:
protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRow row = ((DataRowView)e.Row.DataItem).Row; // if this doesn't work use the debugger to see the real type
TextBox txtDateTo = (TextBox) e.Row.FindControl("txtDateTo");
DateTime? byPassDateTo = row.Field<DateTime?>("ByPassDateTo");
txtDateTo.Text = byPassDateTo.HasValue ? byPassDateTo.ToShortDateString() : "";
}
}
由于类型安全和编译时间检查,它也更高效,更不容易出错。
答案 2 :(得分:1)
您应该检查从数据库检索的值是否为null。您可以尝试下面的文本框代码:
<asp:TextBox runat="server" id="txtDateTo" Text='<%# Eval("ByPassDateTo") == null ? string.Empty : Convert.ToDateTime(Eval("ByPassDateTo")).ToString("MM/dd/yyyy") %>' Enabled='<%#(String.IsNullOrEmpty(Eval("ByPassDateTo").ToString()) ? true : false) %>' />