Ну, этот вопрос был задан более месяца назад и может быть неактуальным сейчас, но @LFSR был достаточно любезен, чтобы отредактировать его недавно, он находится в списке "Активные вопросы".
Так как он остается без ответа (224 просмотра!), Я подумал, что стоит попробовать:
Проблема заключается в том, что в контексте GridView DropDownList (далее именуемый DDL) является динамическим элементом управления, и поэтому его события должны быть повторно присоединены к Postback.
Когда эта концепция понятна, решение становится относительно простым:
ASPX:
<asp:DropDownList ID="DDL1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DDL1_SelectedIndexChanged">
<asp:ListItem Text="Review" Value="Review" Selected="True">Review</asp:ListItem>
<asp:ListItem Text="Level1" Value="lvl1">Send Back to Level1</asp:ListItem>
</asp:DropDownList>
Код CS:
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
// Bind the GridView to something.
DataBindGrid();
}
}
protected void DDL1_SelectedIndexChanged(object sender, EventArgs e)
{
this.lblCity.Text = ((DropDownList)sender).SelectedValue;
}
protected void grdPoll_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(Page.IsPostBack)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = e.Row.FindControl("DDL1") as DropDownList;
if(ddl != null)
{
ddl.SelectedIndexChanged += new EventHandler(DDL1_SelectedIndexChanged);
}
}
}
}