在DataGrid的模板中自定义了个DropDownList DDL 想让DDP在被选择时响应SelectedIndexChanged事件 
下面是aspx文件
<asp:DataGrid id="DataGrid1" runat="server" ShowHeader="False" AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
测试
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DDL" Runat="server" AutoPostBack="True"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
</Columns>
</asp:DataGrid>//------------------------------------------------------------
cs文件
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
DropDownList DDL=(DropDownList)e.Item.FindControl("DDL");
if (DDL!=null)
{
BindDropDownList("select * from tb_DZDoc",DDL,"vc_OilName","d_id"); //从数据库中获取数据
DDL.SelectedIndexChanged+= new System.EventHandler(this.DDP);
}
}private void DDP(object sender, System.EventArgs e)
{
Response.Write("a");
}可是为什么 每次DDL改变了选择项 缺没有执行Response.Write("a");呢??

解决方案 »

  1.   

    itemdatabound is not triggered upon postback, use ItemCreated event instead instead
    private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    DropDownList DDL=(DropDownList)e.Item.FindControl("DDL");
    if (DDL!=null)
    {
    if (!IsPostBack)
    BindDropDownList("select * from tb_DZDoc",DDL,"vc_OilName","d_id"); //从数据库中获取数据
    DDL.SelectedIndexChanged+= new System.EventHandler(this.DDP);
    }
    }
      

  2.   

    你注册事件的地方不对
    应该在ItemCreated事件里面或者直接写在html里面参考下文http://blog.csdn.net/brightheroes/archive/2004/11/13/180711.aspx