0

我有一个填充了文本框的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 填充了空值,我会得到错误
Object cannot be cast from DBNull to other types。

有人可以告诉我这样做的正确方法.. Tnx!

4

3 回答 3

2

如果条件与 Enabled 相同,则可以使用 inline。

请尝试以下代码:

<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) %>'   />

谢谢

于 2013-11-13T09:42:53.493 回答
1

您应该检查从数据库中检索到的值是否为空。您可以尝试下面的文本框代码:

 <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) %>'   />
于 2013-11-13T09:45:19.020 回答
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() : "";
    }
}

由于类型安全和编译时检查,它也更高效且不易出错。

于 2013-11-13T09:41:43.830 回答