0

我在 RowDataBound 事件的 Gridview 中添加了下拉列表。代码是:

if (e.Row.RowType == DataControlRowType.DataRow)
{
    DropDownList ddlSeason = new DropDownList();

    ddlSeason.DataSourceID = "odsRoomSeason";
    ddlSeason.DataTextField = "SeasonTittle";
    ddlSeason.DataValueField = "SeasonID";
    ddlSeason.AutoPostBack = true;
    ddlSeason.SelectedIndexChanged += new EventHandler(ddlSeason_SelectedIndexChanged);

    TableCell tcSeason= new TableCell();

    tcSeason.Controls.Add(ddlSeason);
    e.Row.Cells.AddAt(e.Row.Cells.Count, tcSeason);
}

我添加的事件处理程序是:

protected void ddlSeason_SelectedIndexChanged(object sender, EventArgs e)
{
    //
}

但问题是事件处理函数没有捕捉到事件。请告诉我如何编写正确的事件处理程序,我还需要获取触发下拉列表事件的行。

4

1 回答 1

1

您是否同时设法解决了这个问题?

确保在事件被触发之前DataBind() 网格,因为 ASP.NET 只能在动态创建的控件在那一刻存在的情况下正确地调度事件。回帖后的页面生命周期大致如下:

  1. 初始化
  2. Page_Load()
  3. 处理事件
  4. 预渲染()
  5. 使成为()

因此,当我仅在 PreRender 或更高版本上生成动态控件时,我遇到了类似的问题,因为事件是在这些步骤之前处理的。在页面生命周期中甚至可能需要两次 DataBind() 网格:一次在 Page_Load() 中,然后在处理事件并更新模型之后,在 PreRender() 中再次 DataBind() 以反映新的模型状态。

于 2010-05-10T06:52:02.240 回答