为什么 SelectedIndexChanged 事件不会从 GridView 的下拉列表中触发? [英] Why isn't the SelectedIndexChanged event firing from a dropdownlist in a GridView?
问题描述
我无法触发下拉列表的 SelectedIndexChanged.我有以下几点:
</表单>
在我后面的代码中,我有这个:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e){this.lblCity.Text = ((DropDownList)sender).SelectedValue;}
如果我将这个相同的 ddl 放在 gridview 之外,它就会触发.
正在发生回发并且自动回发设置为 true.该事件永远不会触发.为什么我无法从 gridview 中触发我的事件?
谢谢.
嗯,这个问题是一个多月前问的,现在可能已经无关紧要了,但是@LFSR 最近好心编辑了它,它在Active问题"列表.
由于它仍未得到答复(224 次观看!),我想我应该试一试:
<小时>问题是在 GridView 的上下文中,DropDownList(以下简称 DDL)是一个动态控件,因此它的事件需要在回发时重新附加.
理解了这个概念后,解决方案就变得相对简单了:
ASPX:
<asp:ListItem Text="Review" Value="Review" Selected="True">Review</asp:ListItem><asp:ListItem Text="Level1" Value="lvl1">发送回 Level1</asp:ListItem></asp:DropDownList>
CS 代码:
protected void Page_Load(object sender, EventArgs e){如果(!Page.IsPostBack){//将 GridView 绑定到某物.数据绑定网格();}}protected void DDL1_SelectedIndexChanged(object sender, EventArgs e){this.lblCity.Text = ((DropDownList)sender).SelectedValue;}protected void grdPoll_RowDataBound(object sender, GridViewRowEventArgs e){如果(页面.IsPostBack){if(e.Row.RowType == DataControlRowType.DataRow){DropDownList ddl = e.Row.FindControl("DDL1") as DropDownList;如果(ddl != 空){ddl.SelectedIndexChanged += new EventHandler(DDL1_SelectedIndexChanged);}}}}
I cannot get my SelectedIndexChanged of my dropdownlist to fire. I have the following:
<form id="form1" runat="server">
<div>
<asp:GridView id="grdPoll" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server"
AutoPostBack="true"
OnSelectedIndexChanged="DropDownList1_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>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Label ID="lblCity" runat="server" Text="Label"></asp:Label>
</div>
</form>
In my code behind I have this:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
this.lblCity.Text = ((DropDownList)sender).SelectedValue;
}
If I put this same ddl outside of the gridview, it fires.
The postback is occurring and the autopostback is set to true. The event just never fires. Why can't I get my event to fire from within the gridview?
Thank you.
Well, this question was asked more than a month ago and may be irrelevant now, but @LFSR was kind enough to edit it recently, it's in the "Active questions" list.
Since it remains unanswered (224 views!), I thought I should give it a go:
The problem is that in the context of a GridView, the DropDownList(referred to hereafter as DDL) is a dynamic control and therefore its events need to be reattached upon Postback.
When this concept is understood, the solution becomes relatively simple :
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 Code:
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);
}
}
}
}
这篇关于为什么 SelectedIndexChanged 事件不会从 GridView 的下拉列表中触发?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!