代码之家  ›  专栏  ›  技术社区  ›  John M

ASP.NET-设置DetailsView文本框的值

  •  2
  • John M  · 技术社区  · 16 年前

    我正试图使用代码隐藏(page_Load或prerender)在detailsView中设置日期时间文本框,使其默认为当前日期时间。

    我所尝试的是(许多变体之一):

    protected void DetailsView2_PreRender(object sender, EventArgs e)
    {
            ((TextBox)DetailsView2.FindControl("date_time")).Text = 
                      DateTime.Now.ToString("d");     
    }
    

    但我得到的只是一个“NullReferenceException”错误。

    我做错了什么?

    2 回复  |  直到 8 年前
        1
  •  4
  •   Canavar    16 年前

    可以使用detailsView控件数据绑定事件在detailsView中设置如下值:

    <asp:Label ID="DetailsView2" runat="server" OnDataBound="DetailsView2_DataBound">
    </asp:Label>
    

    代码落后:

    protected void DetailsView2_DataBound(object sender, EventArgs e)
    {
        DetailsView myDetailsView = (DetailsView)sender;
        if(myDetailsView.CurrentMode == DetailsViewMode.Edit)
        {
            ((TextBox)myDetailsView.FindControl("date_time")).Text = DateTime.Now.ToString("d");     
        }
    }
    
        2
  •  1
  •   John M    16 年前

    加上卡纳瓦尔的建议:

    用于detailsView分配,如下所示:

    <asp:DetailsView ID="DetailsView2" runat="server" AutoGenerateRows="False" 
        CellPadding="4" DataKeyNames="details_id" DataSourceID="SqlDataSource4" 
        DefaultMode="Insert" ForeColor="#333333" GridLines="None" Height="50px" 
        Width="125px" 
         AllowPaging="True"  OnPreRender="DetailsView2_DataBound">
    

    然后在后面的代码中:

    protected void DetailsView2_DataBound(object sender, EventArgs e)
    {
        DetailsView myDetailsView = (DetailsView)sender;
        //Edit
        if (myDetailsView.CurrentMode == DetailsViewMode.Edit)
        {
            ((TextBox)myDetailsView.FindControl("TextBox2")).Text = DateTime.Now.ToString("g");
        }
        //Insert
        else if (myDetailsView.CurrentMode == DetailsViewMode.Insert)
        {
            ((TextBox)myDetailsView.FindControl("TextBox2")).Text = DateTime.Now.ToString("M/d/yyyy HH:mm");
        }
    }