cómo encontrar el control de la lista desplegable dentro de una lista de datos

Tengo un DataList y dentro de él tengo un DropDownList:

  <asp:DataList ID="dlconfigureItem" runat="server">
    <ItemTemplate>
    <asp:DropDownList CssClass="config-select" ID="ddlitem    runat="server"></asp:DropDownList>
  </ItemTemplate>
  </asp:DataList>

¿Cómo puedo obtener el evento de cambio de índice seleccionado de DropDownList en el lado del servidor? Intenté esto:

   public void ddlitem_selectedindexchanged (object sender, EventArgs e)
    {

    }

Pero no está funcionando.

preguntado el 22 de mayo de 12 a las 13:05

No estoy seguro de si se trata de un tipo o, pero también le falta el cierre " en su identificación de su lista desplegable. -

4 Respuestas

Ha definido el método del lado del servidor:

public void ddlitem_selectedindexchanged (object sender, EventArgs e)
{

}

pero no le ha dicho al lado del cliente que hay un evento para usted, por lo que en el código html dígalo así:

 onselectedindexchanged="ddlitem_selectedindexchanged"

y también establezca la propiedad AutoPostBack en verdadero.

contestado el 22 de mayo de 12 a las 13:05

y sí, como dijo Tim: "Tenga en cuenta que no debe vincular su DataList a su DataSource en las devoluciones de datos, de lo contrario, los eventos no se activan". Compruébalo también. - imran balouch

Desde el SelectedIndexChanged evento lo más fácil es lanzar el sender de las personas acusadas injustamente llamadas DropDownList

var ddl = (DropDownList)sender;

La remitente es siempre el control que es la fuente del evento.

En aras de la exhaustividad, de ItemDataBound de los DataList:

protected void dlconfigureItem_ItemDataBound(object sender, DataListItemEventArgs e) 
{
    DropDownList ddlitem = e.Item.FindControl("ddlitem") as DropDownList;
    if (ddlitem != null)
    {
        // ...
    }
}

Editar: ¿Ha olvidado registrar el evento?

<asp:DropDownList CssClass="config-select" 
    ID="ddlitem" 
    OnSelectedIndexChanged="ddlitem_selectedindexchanged"    
    runat="server">
</asp:DropDownList>

Tenga en cuenta que no debe vincular su lista de datos a su fuente de datos en las devoluciones de datos, de lo contrario, los eventos no se activan. Así que revisa el IsPostBack propiedad de la página.

Por ejemplo en page_load:

if(!IsPostBack)BindDataList();

contestado el 22 de mayo de 12 a las 13:05

Registre el evento y establezca AutoPostBack="true"

<asp:DropDownList CssClass="config-select" 
    ID="ddlitem" 
    AutoPostBack="true"
    OnSelectedIndexChanged="ddlitem_selectedindexchanged"    
    runat="server">
</asp:DropDownList>

evento (en el cambio de índice seleccionado puede obtener el valor seleccionado)

    protected void ddlCategory_SelectedIndexChanged(object sender, EventArgs e)
    {
        var ddlList = (DropDownList)sender;
        string selectedValue = ((DropDownList)ddlList.NamingContainer.FindControl("ddlitem")).SelectedValue;   
    }

contestado el 22 de mayo de 12 a las 14:05

No estoy seguro si no puede obtener el elemento seleccionado en el servidor o si no puede encontrar la manera de manejar el evento. En caso de que su problema sea con el manejo de eventos, intente esto

  <asp:DataList ID="dlconfigureItem" runat="server">
    <ItemTemplate>
    <asp:DropDownList CssClass="config-select" ID="ddlitem" 
       OnSelectedIndexChanged="ddlitem_selectedindexchanged" 
       AutoPostBack="true" runat="server"></asp:DropDownList>
  </ItemTemplate>
  </asp:DataList>

contestado el 22 de mayo de 12 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.