SQL データ ソースにバインドされたグリッドビューがあります。
RowBound メソッドには、編集可能なテキスト ボックスをフォーマットするために次のコードがあります。
protected void gridview_RowDataBound(Object sender, GridViewRowEventArgs e)
{
//Format the Edit row.
if (e.Row.RowIndex == gridview.EditIndex && e.Row.RowIndex >= 0)
{
//Add Ajax Calendar to Date fields
TextBox startDate= ((TextBox)e.Row.Cells[7].Controls[0]);
startDate.ID = "txtStartDate";
TextBox endDate= ((TextBox)e.Row.Cells[8].Controls[0]);
endDate.ID = "txtEndDate";
startDate.Attributes.Add("onchange", "javascript:GridviewAutoCalculateEndDate(this, " + endDate.ClientID + ");");
AjaxControlToolkit.CalendarExtender startDateCalendar = new AjaxControlToolkit.CalendarExtender();
startDateCalendar .ID = "startDateCalendar ";
startDateCalendar .TargetControlID = "txtStartDate";
startDateCalendar .Format = "dd/MM/yyyy";
AjaxControlToolkit.CalendarExtender endDateCalendar = new AjaxControlToolkit.CalendarExtender();
endDateCalendar.ID = "endDateCalendar";
endDateCalendar .TargetControlID = "txtEndDate";
endDateCalendar .Format = "dd/MM/yyyy";
e.Row.Cells[7].Controls.Add(startDate);
e.Row.Cells[8].Controls.Add(endDate);
e.Row.Cells[7].Controls.Add(startDateCalendar );
e.Row.Cells[8].Controls.Add(endDateCalendar );
}
}
上記は、動的な AjaxCalendarExtender を 2 つのテキスト ボックスと JavaScript に追加するだけで、startDate テキスト ボックスに入力された日付を取得し、それに 1 年を追加して endDate テキスト ボックスで更新します (手動で変更する必要はありません)。
私が抱えている問題は、[更新] コマンド フィールドをクリックすると、これら 2 つのテキスト ボックスへの null 参照が取得され、それらのテキスト ボックス内のテキストもクリアされることです (ポストバックと関係がありますか?)。
更新コードは次のとおりです。
protected void gridview_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
DateTime startDate= new DateTime();
DateTime.TryParseExact(e.NewValues[6].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out startDate);
DateTime endDate= new DateTime();
DateTime.TryParseExact(e.NewValues[7].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out endDate);
dataContext.UpdateDates(startDate, endDate);
PerformDataBind();
}
基本的に、[更新] をクリックした直後に startDate と endDate がクリアされて null になるようです。e.NewValues は日付フィールドを取得していないようです。動的データを削除すると、問題なく更新されます。
私は何が欠けていますか?