2012-06-04 37 views
8

我有一个asp:repeater项模板中的下拉列表。 我怎样才能得到它的按钮点击事件的价值。在按钮点击事件中的asp:repeater中查找控制

<asp:Repeater runat="server" ID="WorkflowListAfter" onitemcreated="WorkflowListAfterItemCreated"> 
    <ItemTemplate> 
     <asp:DropDownList ID="ddlWorkflowMembers" runat="server" DataTextField="MemberName" DataValueField="MemberID"> 
    </ItemTemplate> 
</asp:Repeater> 

protected DropDownList ddlWorkflowMembers = new DropDownList(); 
protected void WorkflowListAfterItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    ddlWorkflowMembers = (DropDownList) e.Item.FindControl("ddlWorkflowMembers"); 
} 
protected void BtnSaveClick(object sender, EventArgs e) { 
    if (ddlWorkflowMembers.SelectedItem == null) return; 
} 

上面的代码在第一时间工作,但回发之后ddlWorkflowMembers总是空的扩展。

+0

是回发后你在做'WorkflowListAfter.DataBind()'吗? –

+0

没有。就在WorkflowListAfterItemCreated(){...} – mhesabi

回答

20

假设BtnSave也在中继器内。

您通过投射按钮的NamingContainer得到RepeaterItem。然后你可以使用FindControl来获取关于你DropDownList

protected void BtnSaveClick(object sender, EventArgs e) { 
    var btn = (Button)sender; 
    var item = (RepeaterItem)btn.NamingContainer; 
    var ddl = (DropDownList) item.FindControl("ddlWorkflowMembers"); 
    // ... 
} 

如果按钮是中继器之外,并要保存所有的项目,你需要遍历所有:

protected void BtnSaveClick(object sender, EventArgs e) { 
    foreach(RepeaterItem item in WorkflowListAfter.Items) 
    { 
     var ddl = (DropDownList) item.FindControl("ddlWorkflowMembers"); 
     // ... 
    }  
}