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
就行了。