2012-06-04 17 views
8

Tengo una lista desplegable dentro de una plantilla de elemento asp: repetidor. cómo puedo obtener su valor en el evento de clic de botón.Buscar Control en asp: repetidor en el botón clic evento

<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; 
} 

el código anterior está trabajando en un primer tiempo, pero después de ddlWorkflowMembers de devolución de datos es siempre expersion nula.

+0

Son estás haciendo 'WorkflowListAfter.DataBind()' después de la devolución? –

+0

no. solo en WorkflowListAfterItemCreated() {...} – mhesabi

Respuesta

20

Suponiendo que BtnSave también está dentro del repetidor.

Obtiene el RepeaterItem lanzando el botón NamingContainer. A continuación, puede utilizar FindControl para obtener la referencia a su DropDownList:

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

Si el botón está fuera del repetidor y que desea guardar todos los artículos, es necesario recorrer todos:

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