第一种方式,在前台页面代码中,捕获事件的方法,如:
QUOTE:
<EditItemTemplate>
<aspropDownList ID="ddl1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl1_SelectedIndexChanged">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</aspropDownList>
</EditItemTemplate>
再从其后台代码中,添加事件处理代码:
QUOTE:
protected void ddl1_SelectedIndexChanged(object sender, EventArgs e)
...{
//.......
}
第二种方式,在OnItemCreated事件的后台代码中,绑定要捕获的模板列控件(嵌套控件)的事件
QUOTE:
private void rptForumGroups_ItemCreated(object sender, RepeaterItemEventArgs e)
...{
if (e.Item.ItemType.ToString() == "Item" || e.Item.ItemType.ToString() == "AlternatingItem")
...{
dgForums = (DataGrid)e.Item.FindControl("dgForums"); // 查找dgForums
dgForums.DeleteCommand += new DataGridCommandEventHandler(dgForums_DeleteCommand); // 捕获DeleteCommand事件
}
}
如何知道是那一行的控件触发了事件?
假如每一行数据中都用两DropDownList,ddl与自己行的另一ddl联动,前台页面代码:
QUOTE:
<asp:Repeater ID="rptLoc" runat="server" OnItemDataBound="rptLoc_ItemDataBound">
<ItemTemplate>
<aspropDownList ID="ddlCity" AutoPostBack="true" OnSelectedIndexChanged="ddlCity_SelectedIndexChanged" runat="server">
</asp:DropDownList> <asp:DropDownList ID="ddlLoc" runat="server">
</asp:DropDownList><br />
</ItemTemplate>
</asp:Repeater>
后台代码:
QUOTE:
protected void ddlCity_SelectedIndexChanged(object sender, EventArgs e)
...{
DropDownList ddl1 = sender as DropDownList;
DropDownList ddl2 = ddl1.Parent.FindControl("ddlLoc") as DropDownList;
//... int n = ((RepeaterItem)ddl1.Parent).ItemIndex;
//......
}