2010-01-06 77 views
0

我在RowDataBound事件的Gridview中添加了Dropdownlist。该代码是:Gridview中Dropdownlist的事件处理程序

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) 
{ 
    // 
} 

但问题是,事件处理函数没有赶上事件。 请告诉我如何编写正确的事件处理程序,还需要获取Dropdownlist事件触发的行。

+0

您是否为下拉列表设置了AutoPostBack =“True”? – 2010-01-06 05:13:38

+0

是的,我已经设置了该属性 – hotcoder 2010-01-06 05:27:51

回答

1

您是否设法在此期间解决此问题?

确保的DataBind()电网的事件要被解雇之前,因为如果动态创建的控件是否有在那一刻ASP.NET只能corrently发出事件。帖子后,页面生命周期背部看起来大致是这样的:

  1. 初始化
  2. 的Page_Load()
  3. 处理事件
  4. 的PreRender()
  5. 渲染()

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