none
No actualiza DropDownList dentro de UptadePanel RRS feed

  • Pregunta

  • Hola buenos dias,

    Tengo el siguiente codigo y desconozco porqué no actualiza los DropDownList del 2º UpdatePanel, pero si el resto de cosas, me explico:

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <div id="divConfiguraciones" class="colDrcha">
                <h5>Objeto</h5>
                <asp:dropdownlist ID="cbObjeto" runat="server"></asp:dropdownlist>
            </div>
            <div id="divAceptar" class="divAceptar">
                <asp:Button ID="btnAceptar" runat="server" Text="Aceptar" />
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
    
    
    <asp:UpdatePanel ID="UpdatePanel2" runat="server">
        <ContentTemplate>
             <asp:table id="tableEstructura" runat="server" />
        </ContentTemplate>
    </asp:UpdatePanel>

    En tableEstructura, en el code behind, voy metiendo TableRows, con sus TableCells y Controls (label y dropdownlist).

    Supongamos objetos en donde muestro en una label su color y en el dropdown, todos los colores para permitir un cambio, pero por defecto, dejo seleccionado el color actual:

    COLOR       Azul          [Rojo, Azul, Verde] (seleccionado Azul)

    ANCHURA   20cm        [10cm, 15cm, 20cm] (seleccionado 20cm)

    y asi sucesivamente.

    La primera vez que se carga la estructura se carga perfectamente con todos los campos seleccionados en el valor correcto, pero cuando cambio algo en cbObjeto y pulso el boton Aceptar, los labels de la tabla tableEstructura se actualizan, pero los dropdownlist no.

    ¿Alguna idea?

    Muchas gracias, un saludo.


    martes, 19 de noviembre de 2019 8:57

Respuestas

  • Hola,

    Me respondo yo mismo por si a alguien le pudiera servir.

    El tema de hacer la llamada en el Load o en el evento click del botón, sigo sin entender por qué actua diferente, pero bueno, en el evento Load tengo un if, para que cargue la estructura solo si la llamada viene de un DropDownList (Request.Params.Get("__EVENTTARGET")) y de otra forma es llamada desde el evento click del botón.

    De esta forma cargo los datos inicialmente desde el evento click y en el load cuando cambio algo en un DropDown, para que asi, vaya desues al evento selectedIndexChanged y ya haga lo que tenga que hacer.

    Gracias, un saludo.

    • Marcado como respuesta vanels jueves, 28 de noviembre de 2019 12:28
    jueves, 28 de noviembre de 2019 12:28

Todas las respuestas

  • hola

    Recuerda que al usar el UpdatePanel el postback se realzia al servidor pero solo actualiza el template de ese updatepanel que realiza el evento

    Si necesitas actualizar otro relacionado vas a tener que definir un trigger

    >>cuando cambio algo en cbObjeto y pulso el boton Aceptar, los labels de la tabla tableEstructura se actualizan, pero los dropdownlist no

    no veo ningun dropdownlist en la tableEstructura, no creo que sea bueno generar controles de forma dinamica, no evaluaste usar un GridView? al definir un template es mas simple asignarle un DataSource para que cree rows segun los datos que proporcionas

    los controles dinamicos son para problema

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 19 de noviembre de 2019 14:00
  • Hola Leandro,

    He probado tambien con un trigger para que del UpdatePanel1 actualice el 2, sin embargo entiendo que si actualiza Labels del UpdatePanel2, es que esta "afectando" de alguna manera el refresco de datos, ¿no?

    Sobre los controles dinamicos, se que no es lo mejor pero necesito crear una estructura diferente segun la seleccion por eso los creo asi. Y necesito que sea un dropdown porque contiene todas las caracteristicas disponibles de la linea en cuestion y que puedo seleccionar para cambiar la actual (la mostrada en el label).

    No ves los dropdown porque los creo y los meto en Cell, Row, Table...

    /* Valor */
                objCell = New TableCell
                lbl = NuevaLabelValor(Tabla.Rows(i)("idValor"), Tabla.Rows(i)("descrValor"))
                objCell.Controls.Add(lbl)
    
                objRow.Cells.Add(objCell)
    
                /* Combo de caracteristicas */
    
                objCell = New TableCell
                combo = NuevoComboValores(Tabla.Rows(i)("idAtributo"), Tabla.Rows(i)("descrValor"))
                objCell.Controls.Add(combo)
                objRow.Cells.Add(objCell)
    
                Dim disparador As New AsyncPostBackTrigger
                disparador.ControlID = combo.ID
                disparador.EventName = "SelectedIndexChanged"
                UpdatePanel1.Triggers.Add(disparador)
    
                tableEstruct.Rows.Add(objRow)

    Si voy depurando todo tiene el valor correcto hasta justo la ultima linea. Es cuando se inserta en la tableEstruct cuando cambia el valor al "cargado la primera vez".

    Gracias!


    • Editado vanels martes, 19 de noviembre de 2019 14:43
    • Propuesto como respuesta Pablo RubioModerator jueves, 21 de noviembre de 2019 23:12
    martes, 19 de noviembre de 2019 14:42
  • He añadido un dropdownlist directamente, cargando los mismos datos que uno de los dinamicos, para hacer la prueba, y tampoco cambia el valor :(

    martes, 19 de noviembre de 2019 15:20
  • Hola,

    He detectado el problema aunque aun sigo trabajando en ello...

    Resulta que lo que hacia era crear la estructura de controles/valores que necesito en el Load de la pagina, de esta forma cuando se producia el Postback, se mostraba todo.

    He probado a hacer la llamada en el evento click del botón que hace la llamada y en este caso SI me cambia los dropdown.

    No entiendo la diferencia :(

    No puedo dejarlo asi del todo porque después, los dropdown tienen el evento que cuando se cambie el valor, deben cambiar de color, y esto llama al evento selectedindexchange, que solo funciona, si hago la carga de la estructura en el Load.

    Saludos.

    miércoles, 20 de noviembre de 2019 9:34
  • Hola,

    Me respondo yo mismo por si a alguien le pudiera servir.

    El tema de hacer la llamada en el Load o en el evento click del botón, sigo sin entender por qué actua diferente, pero bueno, en el evento Load tengo un if, para que cargue la estructura solo si la llamada viene de un DropDownList (Request.Params.Get("__EVENTTARGET")) y de otra forma es llamada desde el evento click del botón.

    De esta forma cargo los datos inicialmente desde el evento click y en el load cuando cambio algo en un DropDown, para que asi, vaya desues al evento selectedIndexChanged y ya haga lo que tenga que hacer.

    Gracias, un saludo.

    • Marcado como respuesta vanels jueves, 28 de noviembre de 2019 12:28
    jueves, 28 de noviembre de 2019 12:28