0

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 は日付フィールドを取得していないようです。動的データを削除すると、問題なく更新されます。

私は何が欠けていますか?

4

2 に答える 2

0

変数名「startDate」と「endDate」は、if ステートメント内にのみ存在します。その名前でそれらを処理したい場合は、より高いスコープでそれらを定義します

于 2013-07-23T08:17:52.417 に答える