none
mostrar ProgressTemplate cuando se ejecuta la consulta asp.net c# RRS feed

  • Pregunta

  • buena tarde comunidad tengo el un problema y espero puedan orientarme, dejo mi código para cualquier ayuda que me puedan dar. lo que necesito es que al presionar el linkbutton que esta en mi gridview muestre el progress para que vea el usuario que se esta ejecutando su consulta, ahorita llevo esto :    

    <asp:ScriptManager ID="ScriptManagerAjaxControl" runat="server" AsyncPostBackTimeout="350"></asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Conditional">
        <Triggers>
          <asp:PostBackTrigger ControlID="gvUsuarioInforme" />
    </Triggers>
        <ContentTemplate>
    	
             <asp:GridView ID="gvUsuarioInforme" CssClass="table table-hover table-bordered table-sm" runat="server" 
    			AutoGenerateColumns="False" OnRowCommand="gvUsuarioInforme_RowCommand" DataKeyNames="idUser" EmptyDataText="Sin información">
                 <Columns>
                     <asp:BoundField DataField="idUser" HeaderText="idUser" />
                        <asp:TemplateField HeaderText="idUser" SortExpression="idUser" ItemStyle-HorizontalAlign="Left">
                            <ItemTemplate>
    							<asp:LinkButton ID="LinkButtonEdit" runat="server" CommandName="ShowPopup" CommandArgument='<%#Eval("idUser") %>'><%#Eval("idUser") %></asp:LinkButton>
    						</ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="Nombre" HeaderText="Nombre" />
                        <asp:BoundField DataField="Deuda" HeaderText="Deuda Interna" DataFormatString = "{0:n0}" ItemStyle-HorizontalAlign="Right" />
                    </Columns>
                <HeaderStyle BorderColor="Gray" Font-Bold="false" HorizontalAlign="Center" Font-Size="Smaller" ForeColor="Black" />
            </asp:GridView>   
    	
        </ContentTemplate>
    </asp:UpdatePanel>
    
    <asp:UpdateProgress ID="uProg" runat="server" DisplayAfter="250" AssociatedUpdatePanelID="UpdatePanel">
        <ProgressTemplate><center>
            <div class="fondoCarga">
                <div class="contenidoC">
                    <img alt="fig" src="/img/spinner.gif" />
                    <h6>Espere por favor...
                    </h6>
                </div>
            </div></center>
        </ProgressTemplate>
    </asp:UpdateProgress>
    
    -----------------------------------------------------------------------------------------------------
            protected void gvUsuarioInforme_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                if (e.CommandName == "ShowPopup")
                {
                    LinkButton btndetails = (LinkButton)e.CommandSource;
                    GridViewRow gvrow = (GridViewRow)btndetails.NamingContainer;
                    string usuarioID = gvUsuarioInforme.DataKeys[gvrow.RowIndex].Value.ToString();
                    mostrarDetalle(usuarioID.Trim().ToString());
                }
            }
    gracias por la ayuda que me puedan dar.


    • Editado killer1923 viernes, 9 de abril de 2021 23:46 ortografia
    viernes, 9 de abril de 2021 23:44

Respuestas

  • Lo que quieres hacer es más complicado de lo que piensas. Seguramente tienes en mente lo que harías si fuera una aplicación de escritorio, en la que esto sería muy simple: en el evento presentarías el progress, después harías el trabajo, y luego quitarías el progress.

    Pero en una aplicación WebForms las cosas son más difíciles. Cuando haces click en el linkbutton, se envía una petición al servidor; en ese momento la pantalla en el navegador "desaparece" por completo (bueno, en este caso particular no desaparece visualmente porque estás usando un UpdatePanel, pero desde un punto de vista "lógico" es como si desapareciera, igual que cuando no usas el UpdatePanel). Cuando el servidor termina de procesar todo lo que le mandes hacer, entonces construye una respuesta HTML y la manda al navegador, y entonces el navegador dibuja lo que le ha llegado en sustitución de lo que había antes. En caso de usar un UpdatePanel, solo se sustituye el contenido interno del mismo, en lugar de la página completa. La cuestión es que en todo este circuito no existe oportunidad de presentar un indicador de progreso (aparte de lo que presente el propio navegador cuando envía la petición al servidor).

    Entonces, ¿cómo se hace? Se recurre a javascript y peticiones AJAX. En el click del botón se ejecuta javascript en lado cliente para presentar el progress, después se envía una petición AJAX al servidor, y cuando el servidor devuelve los resultados, el javascript los toma, los presenta en pantalla, y retira el progress. Como ves, es un mecanismo muy distinto, y no permite usar los mecanismos predeterminados de ASP.NET WebForms. Pero si no necesitas mucha personalización del progress, puedes dejar que el ScriptManager haga por tí dentro de su javascript interno todo lo que hemos mencioado antes en este párrafo. Para ello, añade en la página un control UpdateProgress y pinta en su interior lo que quieras que se muestre mientras dure la llamada al servidor.

    Aquí la documentación.

    • Marcado como respuesta killer1923 lunes, 12 de abril de 2021 19:36
    sábado, 10 de abril de 2021 10:10

Todas las respuestas

  • Lo que quieres hacer es más complicado de lo que piensas. Seguramente tienes en mente lo que harías si fuera una aplicación de escritorio, en la que esto sería muy simple: en el evento presentarías el progress, después harías el trabajo, y luego quitarías el progress.

    Pero en una aplicación WebForms las cosas son más difíciles. Cuando haces click en el linkbutton, se envía una petición al servidor; en ese momento la pantalla en el navegador "desaparece" por completo (bueno, en este caso particular no desaparece visualmente porque estás usando un UpdatePanel, pero desde un punto de vista "lógico" es como si desapareciera, igual que cuando no usas el UpdatePanel). Cuando el servidor termina de procesar todo lo que le mandes hacer, entonces construye una respuesta HTML y la manda al navegador, y entonces el navegador dibuja lo que le ha llegado en sustitución de lo que había antes. En caso de usar un UpdatePanel, solo se sustituye el contenido interno del mismo, en lugar de la página completa. La cuestión es que en todo este circuito no existe oportunidad de presentar un indicador de progreso (aparte de lo que presente el propio navegador cuando envía la petición al servidor).

    Entonces, ¿cómo se hace? Se recurre a javascript y peticiones AJAX. En el click del botón se ejecuta javascript en lado cliente para presentar el progress, después se envía una petición AJAX al servidor, y cuando el servidor devuelve los resultados, el javascript los toma, los presenta en pantalla, y retira el progress. Como ves, es un mecanismo muy distinto, y no permite usar los mecanismos predeterminados de ASP.NET WebForms. Pero si no necesitas mucha personalización del progress, puedes dejar que el ScriptManager haga por tí dentro de su javascript interno todo lo que hemos mencioado antes en este párrafo. Para ello, añade en la página un control UpdateProgress y pinta en su interior lo que quieras que se muestre mientras dure la llamada al servidor.

    Aquí la documentación.

    • Marcado como respuesta killer1923 lunes, 12 de abril de 2021 19:36
    sábado, 10 de abril de 2021 10:10
  • Hola,

    ¿Alguna novedad sobre la consulta realizada?

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 12 de abril de 2021 13:55
    Moderador
  • gracias por la explicación  Alberto 
    lunes, 12 de abril de 2021 19:36