Я пытаюсь использовать код-позади (Page_Load или PreRender), чтобы установить текстовое поле даты-времени в DetailsView, чтобы оно по умолчанию использовало текущую дату-время.
Я попытался (один из многих вариантов):
protected void DetailsView2_PreRender(object sender, EventArgs e)
{
((TextBox)DetailsView2.FindControl("date_time")).Text =
DateTime.Now.ToString("d");
}
Но все, что я получаю, является ошибкой "NullReferenceException".
Что я делаю неправильно?
Вы можете использовать элементы управления представлением данных DataBound для установки значения в вашем представлении данных следующим образом:
<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");
}
}
Чтобы добавить к тому, что предложил Канавар:
Для использования в 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");
}
}