Gridview OnSelectedIndexChanged 的事件永远不触发?



  1. protected void Page_Load(object sender, EventArgs e) 
  2.    { 
  3.        if (!IsPostBack) 
  4.        { 
  5.            bind(); 
  6.             
  7.        } 
  8.    } 
  9. 
  10.    public void bind() 
  11.    { 
  12.        string sqlStr = "select * from Employee"; 
  13.        DataSet myds = Common.dataSet(sqlStr); 
  14.        GridView1.DataSource = myds; 
  15.        GridView1.DataKeyNames = new string[] { "ID" }; 
  16.        GridView1.DataBind(); 
  17. 
  18.        AccessDataSource s = new AccessDataSource("E:\\WebSite\\GridViewExamples\\GridViewExamples\\App_Data\\Example.mdb", "select * from Employee"); 
  19.        this.GridView1.DataSourceID = s.ID; 
  20.        this.GridView1.DataBind(); 
  21.    } 
  22.    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
  23.    { 
  24.        if (e.Row.RowType == DataControlRowType.DataRow) 
  25.        { 
  26.            DropDownList ddlrefresh = (DropDownList)e.Row.FindControl("ddlRefresh"); 
  27. 
  28.            //ddlrefresh.NamingContainer 
  29.            ddlrefresh.AutoPostBack = true; 
  30.            ddlrefresh.SelectedIndexChanged += new EventHandler(ddlrefresh_SelectedIndexChanged); 
  31. 
  32.        } 
  33.    } 
  34. 
  35.    protected void ddlrefresh_SelectedIndexChanged(object sender, EventArgs e) 
  36.    { 
  37.        ClientScript.RegisterStartupScript(this.GetType(), "script13", "<mce:script type="text/javascript"><!-- 
  38. alert('ddlrefresh_SelectedIndexChanged') 
  39. // --></mce:script>"); 
  40.    } 


上面这样写dropdownlist 的事件永远不触发?


但是当代码换成

  1. <asp:TemplateField> 
  2.            <ItemTemplate> 
  3.            [color=#FF0000]  <asp:DropDownList ID="ddlRefresh" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlrefresh_SelectedIndexChanged">[/color]                        <asp:ListItem Value="1">1</asp:ListItem> 
  4.                    <asp:ListItem Value="2">2</asp:ListItem> 
  5.                    <asp:ListItem Value="3">3</asp:ListItem> 
  6.                </asp:DropDownList> 
  7.            </ItemTemplate> 
  8.        </asp:TemplateField> 


就会执行。
为什么第一种方法不执行呢?
解决方法:

# protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) 
#    { 
#        if (e.Row.RowType == DataControlRowType.DataRow) 
#        { 
#            DropDownList ddlrefresh = (DropDownList)e.Row.FindControl("ddlRefresh"); 

#            //ddlrefresh.NamingContainer 
#            ddlrefresh.AutoPostBack = true; 
#            ddlrefresh.SelectedIndexChanged += new EventHandler(ddlrefresh_SelectedIndexChanged); 

#        } 
#    }


将事件代码加入到
RowCeated

就行了。