none
DropDownList no funciona el evento SelectedIndexChanged RRS feed

  • Pregunta

  • Hola Gente...

    estoy teniendo un problema con la carga de los dropdownList 

    en la pagina direccion.aspx tengo declarados dos dropdownList uno ddProvincia y uno ddLocalidad ... hago el seguimiento y carga la informacion de las provincias y de las localidades pero en por ejemplo en el ddProvincia no importa que provincia eliga me vuelve a la primera de la lista (Buenos Aires) por orden alfabético y no me carga ninguna localidad en ddLocalidad

    direccion.aspx

                                         

       <asp:Label ID="lblProvincia" For="ddProvincia" style="margin- color:white" runat="server" Text="Provincia"></asp:Label>

         <asp:DropDownList ID="ddProvincia" runat="server" AutoPostBack="True" Width="400px" OnSelectedIndexChanged="ddProvincia_SelectedIndexChanged" >

        </asp:DropDownList>
        <br />
        <asp:Label ID="lblLocalidad" for="ddLocalidad" style="margin-left:100px; color:white" runat="server" Text="Localidad"></asp:Label>
        <asp:DropDownList ID="ddLocalidad" runat="server" Width="400px" ClientIDMode="Static" >
        </asp:DropDownList>
        <br />   

    Direccion.aspx.cs  public void cargarProvincias(int? elIndice = null)
            {
                ddProvincia.DataSource = null;
                unasProvincias = unManagerUsuario.SelectALLProvincias();
                ddProvincia.DataSource = unasProvincias;
                ddProvincia.DataValueField = "IdProvincia";
                ddProvincia.DataTextField = "Descripcion";
                ddProvincia.DataBind();
                if (elIndice != null)
                    ddProvincia.SelectedIndex = (int)elIndice;
            }

            public void cargarLocalidades()
            {
                ddLocalidad.DataSource = null;
                ddLocalidad.DataSource = unasProvincias.Find(X => X.IdProvincia == (int.Parse(ddProvincia.SelectedValue))).misLocalidades;
                ddLocalidad.DataValueField = "IdLocalidad";
                ddLocalidad.DataTextField = "Descripcion";
                ddLocalidad.DataBind();
            }

            protected void ddProvincia_SelectedIndexChanged(object sender, EventArgs e)

            {
                    int aux = Int32.Parse(ddProvincia.SelectedValue);
                    aux--;
                    cargarProvincias(aux);
                    cargarLocalidades();
            } cuando cargo el page load cargo provincias y localidades 

      protected void Page_Load(object sender, EventArgs e)
            {

                cargarProvincias();
                cargarLocalidades();


            } desde ya Gracias

    viernes, 8 de mayo de 2020 22:03

Respuestas

  • Respuesta rápida: Te falta comprobar si es un postback en el Page_Load:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
                 cargarProvincias();
                 cargarLocalidades();
        }
    }

    Explicación larga: En una aplicación WebForms, a diferencia de una aplicación de escritorio, el Page_Load se ejecuta en todos los postbacks, y no solo en la primera carga de la página. Dado que en el Page_Load estabas cargando el combo, esto "resetea" el contenido anterior y se pierde el valor que se había seleccionado antes de disparar el postback. Por eso siempre te llega seleccionado el primer elemento.

    Ah, y quita la llamada a CargarProvincias que hay dentro del SelectedIndexChanged. Esto es superfluo, el contenido y la selección se conservan automáticamente gracias al ViewState (una vez que quites del Page_Load el código que lo recarga a cada postback).


    domingo, 10 de mayo de 2020 20:11

Todas las respuestas

  • Respuesta rápida: Te falta comprobar si es un postback en el Page_Load:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
                 cargarProvincias();
                 cargarLocalidades();
        }
    }

    Explicación larga: En una aplicación WebForms, a diferencia de una aplicación de escritorio, el Page_Load se ejecuta en todos los postbacks, y no solo en la primera carga de la página. Dado que en el Page_Load estabas cargando el combo, esto "resetea" el contenido anterior y se pierde el valor que se había seleccionado antes de disparar el postback. Por eso siempre te llega seleccionado el primer elemento.

    Ah, y quita la llamada a CargarProvincias que hay dentro del SelectedIndexChanged. Esto es superfluo, el contenido y la selección se conservan automáticamente gracias al ViewState (una vez que quites del Page_Load el código que lo recarga a cada postback).


    domingo, 10 de mayo de 2020 20:11
  • Era eso! Muchísimas Gracias!
    lunes, 11 de mayo de 2020 18:51