none
Atualizar um Contador Durante o Método RRS feed

  • Pergunta

  • Boa noite, 

    Estou desenvolvendo uma aplicação para impressão de cartões, porém o método de impressão, dependendo das quantidades a serem enviadas para a impressora é um pouco lento para montagem de cada 1 delas.

    Utilizo 1 FOR para percorrer a DataTable com as informações dos cartões, porém não estou conseguindo passar para o usuário que está aguardando a impressão, qual é o cartão que está sendo montado no momento.

    Já tentei colocar 1 updatePanel e forçar o update dentro do for, mas o postback só acontece após a finalização do método inteiro, ou seja, mesmo que eu dê um Update a cada passada do FOR a atualização ocorrerá somente no final de execução do método completo.

    Como posso resolver esse problema? Alguém pode me ajudar?

    quinta-feira, 31 de julho de 2014 01:12

Respostas

  • Bom dia!

    Consegui resolver da seguinte forma:

    <div id="corpo">
                <asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <asp:Button runat="server" Text="Atualiza" ID="btnAtualiza" Style="display: none;"
                            OnClick="btnAtualiza_Click" />
                        <p>
                            <asp:Label ID="lblStatus" runat="server" Text="Clique na impressora abaixo para iniciar o processamento."></asp:Label>
                        </p>
                        <asp:TextBox ID="log" runat="server" ReadOnly="True" TextMode="MultiLine" Visible="false"></asp:TextBox>
                        <asp:Image ID="imgStatus" runat="server" ImageAlign="Middle" ImageUrl="~/Images/carregando.gif" Visible="false" />
                    </ContentTemplate>
                </asp:UpdatePanel>
                <script type="text/javascript">
    
                    function Process() {
                        var btn = document.getElementById('<%=btnAtualiza.ClientID%>');
                        btn.click();
                        setTimeout(Process, 100);
                    }
                </script>
                <p>
                    <a>
                        <asp:Button ID="btnGerar" runat="server" Text="Gerar Carteirinhas" OnClick="btnGerar_Click" OnClientClick="Process();" /></a>
                </p>
            </div>

    static int contador = -1;
    static int total = -1;
    
    
        protected void btnGerar_Click(object sender, EventArgs e)
        {
            emitir();
        }
    
        protected void btnAtualiza_Click(object sender, EventArgs e)
        {
            if (contador == -1)
            {
                lblStatus.Text = "Aguarde, carregando dados para impressão...";
                imgStatus.Visible = true;
            }
            else
            {
                lblStatus.Text = String.Format("Imprimindo cartão {0} de {1}", contador.ToString(), total);
            }
        }
    
        void emitir()
        {
            total = 100
    
            if (total > 0)
                for (contador = 0; contador < total; contador++)
                {
                    [MÉTODOS]
                }
        }

    • Sugerido como Resposta GuSouza quinta-feira, 31 de julho de 2014 13:36
    • Marcado como Resposta Ricardo Barbosa Cortes quinta-feira, 31 de julho de 2014 19:52
    quinta-feira, 31 de julho de 2014 13:18