GridView TextBox

时间:2013-11-13 09:33:18

标签: c# asp.net visual-studio-2010

我有一个填充了文本框的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!

3 个答案:

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