簡體   English   中英

使用動態創建的文本框更新gridview

[英]gridview update with dynamically created textboxes

我有綁定到sql數據源的gridview。

在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添加到兩個文本框和javascript中,采用在startDate文本框中輸入的日期,對其添加了一年並在endDate文本框中進行了更新(因此您不必手動更改)。

我遇到的問題是,當我單擊“更新”命令字段時,我獲得了對這兩個文本框的空引用,並且其中的文本也清除了(與回發有關嗎?)

這是更新代碼:

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似乎在單擊Update之后立即清除並變為null。 e.NewValues似乎沒有拉日期字段。 如果我要刪除動態數據,它們會更新就好了。

我想念什么?

變量名稱“ startDate”和“ endDate”僅存在於if語句中,如果您想使用該名稱來對它們進行定義,請在更高的范圍內進行定義

發生了什么:

每次加載頁面時,都必須創建動態創建的控件。 當您按下“更新”按鈕時,將發生“回發”,並且在該“回發”中,您必須重新創建動態控件才能訪問它們。

意思是,如果正在發生RowUpdating ,並且您之前沒有經過RowDataBound ,則控件不存在。

我還假定在Updating PostBack期間, gridview.EditIndex將具有不同的值,因此您的控件在任何情況下都不會存在。

您應該怎么做:

您應該在標記中設計編輯模式模板,並讓ASP.NET處理控件的創建。 利用數據綁定功能,讓他們為您完成工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM