我在RowDataBound事件的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 :(得分:1)
你有没有设法解决这个问题?
确保 DataBind()在事件将被触发之前的网格,因为ASP.NET只能动态调度事件,如果动态创建的控件是在那一刻。回发后的页面生命周期大致如下:
因此,当我在PreRender或更高版本上生成动态控件时,我遇到了类似的问题,因为事件是在这些步骤之前处理的。 在页面生命周期中,可能需要DataBind()网格甚至两次:一旦进入Page_Load(),那么在处理完事件并更新模型后,PreRender()中的另一个DataBind()反映新的模范状态。