none
Exibir a imagem de um load(carregando), conforme a exportação de dados de um gridview para Excel: RRS feed

  • Pergunta

  • Bom dia.

    Estou querendo informar ao usuário que o arquivo esta sendo exportado, até consigo exibir a imagem de um load(carregando), porém não consigo tornar a imagem invisível apos o fim da exportação: 

    função para exibir a imagem:

                                

    function exportarDados() {
                var exportarButtonId = '<%= btnExportar.ClientID %>'
                WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(exportarButtonId, "", true, "", "", false, false))

                    document.getElementById('<%= myHiddenDiv.ClientID %>').style.display = "";
                    setTimeout('document.images["myAnimatedImage"].src = "imagens/progress-wheel.gif"', 200);

            } 

                 

     protected void btnExportar_Click(object sender, System.EventArgs e)
        {

            System.Threading.Thread.Sleep(3000);

            filtro();

            if (rbtExportar.SelectedValue == Convert.ToString(0))
            {          
               exportarExcel();
            }

            if (rbtExportar.SelectedValue == Convert.ToString(1))
            {            
                exportarCsv();
            }
        }

    O que está faltando fazer, para funcionar?

    segunda-feira, 1 de julho de 2013 14:13

Respostas

  • opa isso nao é possivel lembre-se que seu processo é executado no seu servidor iis(já pensou vc estar numa página e ir alterando e lendo teus arquivos e pastas ? única coisa que podemos rodar no cliente é javascript), talvés com silverligth vc consiga, mais tem que instalar teu sistema silverligth no cliente.

    Junior

    • Marcado como Resposta Guga Oliveira segunda-feira, 15 de julho de 2013 19:05
    sexta-feira, 5 de julho de 2013 19:40

Todas as Respostas

  • Veja se isso aqui te ajuda

    http://forums.asp.net/t/1298683.aspx

    Junior

    segunda-feira, 1 de julho de 2013 15:15
  • Boa tarde!

    Junior,

    Eu já tinha tentado algo parecido do que foi feito no link que você me passou.

    O problema que estou encontrando é que quando o processo de exportação do arquivo termina, ele não chama o evento que tornaria a modalpopup  invisível.

                    Response.Clear();
                    Response.Buffer = true;

                    Response.AddHeader("content-disposition", "attachment;filename=" + vstrNomeArquivo);
                    Response.Charset = "";
                    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

                    StringWriter sw = new StringWriter();
                    HtmlTextWriter hw = new HtmlTextWriter(sw);

                    gvwVMRPT.AllowPaging = false;
                    gvwVMRPT.DataBind();               

                    for (int i = 0; i <= gvwVMRPT.Rows.Count - 1; i++)
                    {
                        GridViewRow row = gvwVMRPT.Rows[i];
                        row.Attributes.Add("class", "textmode");
                    }
                    gvwVMRPT.RenderControl(hw);
                    //style to format numbers to string
                    string style = "<style> .textmode { mso-number-format:\\@; } </style>";
                    Response.Write(style);
                    Response.Output.Write(sw.ToString());
                    Response.Flush();
                    Response.End();             

     

    O response.end não permite que o Hide funcione.                

    programmaticModalPopup.Hide();


    segunda-feira, 1 de julho de 2013 18:38
  • Alguém pode me ajudar?
    quarta-feira, 3 de julho de 2013 14:11
  • Estranho aqui eu uso nos relatorios, tem alguns que demoram demais ai abro o modal com a gif e qdo o relatorio esta pronto automaticamente ele fecha o modal e exibe o relatorio.

    Junior

    quarta-feira, 3 de julho de 2013 14:27
  • Estranho aqui eu uso nos relatorios, tem alguns que demoram demais ai abro o modal com a gif e qdo o relatorio esta pronto automaticamente ele fecha o modal e exibe o relatorio.

    Junior

    Boa tarde!

    Junior,

    Tem como você postar parte do código que abre a modal e onde fecha a modal?


    quarta-feira, 3 de julho de 2013 15:40
  • no aspx :

    <asp:Panel runat="server" CssClass="modalPopup" ID="programmaticPopup" style="display:none;width:350px;padding:10px"> 
                                <asp:Panel runat="Server" ID="programmaticPopupDragHandle" Style="cursor: move;background-color:#DDDDDD;border:solid 1px Gray;color:Black;text-align:center;"> 
                                    Processando... Por Favor Espere... 
                                </asp:Panel> 
                                <br /> 
                                <div style="text-align:center;"><img src="../../Imagens/carregando6.gif" alt="processando" /></div> 
                            </asp:Panel> 


     <tr>
                        <td>
                            <ajaxToolkit:ModalPopupExtender ID="programmaticModalPopup" runat="server"
                                BehaviorID="programmaticModalPopupBehavior" 
                                TargetControlID="hiddenTargetControlForModalPopup" 
                                PopupControlID="programmaticPopup" 
                                BackgroundCssClass="modalBackground" 
                                DropShadow="True" 
                                PopupDragHandleControlID="programmaticPopupDragHandle" 
                                RepositionMode="RepositionOnWindowScroll" > 
                            </ajaxToolkit:ModalPopupExtender>
                            
                        </td>
                   </tr>

    no botão

    <asp:Button ID="ProcurarButton" runat="server" CommandName="Procurar" OnClientClick="$find('programmaticModalPopupBehavior').show();" Text="Pesquisar" OnClick="ProcurarButton_Click" />
                            <asp:Button runat="server" ID="hiddenTargetControlForModalPopup" style="display:none"/> 


    Junior

    quarta-feira, 3 de julho de 2013 16:07
  • no aspx :

    <asp:Panel runat="server" CssClass="modalPopup" ID="programmaticPopup" style="display:none;width:350px;padding:10px"> 
                                <asp:Panel runat="Server" ID="programmaticPopupDragHandle" Style="cursor: move;background-color:#DDDDDD;border:solid 1px Gray;color:Black;text-align:center;"> 
                                    Processando... Por Favor Espere... 
                                </asp:Panel> 
                                <br /> 
                                <div style="text-align:center;"><img src="../../Imagens/carregando6.gif" alt="processando" /></div> 
                            </asp:Panel> 


     <tr>
                        <td>
                            <ajaxToolkit:ModalPopupExtender ID="programmaticModalPopup" runat="server"
                                BehaviorID="programmaticModalPopupBehavior" 
                                TargetControlID="hiddenTargetControlForModalPopup" 
                                PopupControlID="programmaticPopup" 
                                BackgroundCssClass="modalBackground" 
                                DropShadow="True" 
                                PopupDragHandleControlID="programmaticPopupDragHandle" 
                                RepositionMode="RepositionOnWindowScroll" > 
                            </ajaxToolkit:ModalPopupExtender>
                            
                        </td>
                   </tr>

    no botão

    <asp:Button ID="ProcurarButton" runat="server" CommandName="Procurar" OnClientClick="$find('programmaticModalPopupBehavior').show();" Text="Pesquisar" OnClick="ProcurarButton_Click" />
                            <asp:Button runat="server" ID="hiddenTargetControlForModalPopup" style="display:none"/> 


    Junior

         

          Do jeito que você faz acima não funciona comigo.

          Você faz exportação de relatórios usando Response?  

    quarta-feira, 3 de julho de 2013 18:49
  • não, qdo gero um arquivo faço com filestream.

    Junior

    quarta-feira, 3 de julho de 2013 19:22
  • não, qdo gero um arquivo faço com filestream.

    Junior

          Junior,

          Se você puder me passar o código de geração com filestream, seria de grande ajuda.

          desde já obrigado.

    quarta-feira, 3 de julho de 2013 20:17
  • Guga aqui esta um exemplo, estou enviando apenas a parte do código onde gero o arquivo, claro que antes fiz uma consulta no BD e com o resultado dessa consulta preencho o arquivo.

    using (StreamWriter swriter = File.CreateText(Page.MapPath("\\arquivos\\Exportacao\\stops.txt")))
                    {
                        if (dr.HasRows)
                        {
                            linha += "stop_id,stop_code,stop_name,stop_desc,stop_lat,stop_lon,zone_id,stop_url,location_type,";
                            linha += "parent_station,stop_timezone,wheelchair_boarding";
                            swriter.WriteLine(linha);
                            swriter.Flush();
                            linha = "";
                            while (dr.Read())
                            {
                                linha += dr["stop_id"].ToString() + ",";
                                linha += dr["stop_code"].ToString() + ",";
                                linha += dr["stop_name"].ToString() + ",";
                                linha += dr["stop_desc"].ToString() + ",";
                                linha += dr["stop_lat"].ToString() + ",";
                                linha += dr["stop_lon"].ToString() + ",";
                                linha += dr["zone_id"].ToString() + ",";
                                linha += dr["stop_url"].ToString() + ",";
                                linha += dr["location_type"].ToString() + ",";
                                linha += dr["parent_station"].ToString() + ",";
                                linha += dr["stop_timezone"].ToString() + ",";
                                linha += dr["wheelchair_boarding"].ToString();
                                swriter.WriteLine(linha);
                                swriter.Flush();
                                linha = "";
                            }
                            swriter.Close();
                            dr.Close();
                            con.Close();
                            con.Dispose();

    Espero que ajude.

    Junior

    quinta-feira, 4 de julho de 2013 11:23
  • Veja 

    http://ajax.net-tutorials.com/controls/updateprogress-control/


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    quinta-feira, 4 de julho de 2013 14:03
    Moderador
  • Guga aqui esta um exemplo, estou enviando apenas a parte do código onde gero o arquivo, claro que antes fiz uma consulta no BD e com o resultado dessa consulta preencho o arquivo.

    using (StreamWriter swriter = File.CreateText(Page.MapPath("\\arquivos\\Exportacao\\stops.txt")))
                    {
                        if (dr.HasRows)
                        {
                            linha += "stop_id,stop_code,stop_name,stop_desc,stop_lat,stop_lon,zone_id,stop_url,location_type,";
                            linha += "parent_station,stop_timezone,wheelchair_boarding";
                            swriter.WriteLine(linha);
                            swriter.Flush();
                            linha = "";
                            while (dr.Read())
                            {
                                linha += dr["stop_id"].ToString() + ",";
                                linha += dr["stop_code"].ToString() + ",";
                                linha += dr["stop_name"].ToString() + ",";
                                linha += dr["stop_desc"].ToString() + ",";
                                linha += dr["stop_lat"].ToString() + ",";
                                linha += dr["stop_lon"].ToString() + ",";
                                linha += dr["zone_id"].ToString() + ",";
                                linha += dr["stop_url"].ToString() + ",";
                                linha += dr["location_type"].ToString() + ",";
                                linha += dr["parent_station"].ToString() + ",";
                                linha += dr["stop_timezone"].ToString() + ",";
                                linha += dr["wheelchair_boarding"].ToString();
                                swriter.WriteLine(linha);
                                swriter.Flush();
                                linha = "";
                            }
                            swriter.Close();
                            dr.Close();
                            con.Close();
                            con.Dispose();

    Espero que ajude.

    Junior

           string vstrNomeArquivo = "\\QUADRO_RESUMO_" + string.Format("{0:d2}", System.DateTime.Now.Day) + string.Format("{0:d2}", System.DateTime.Now.Month) + string.Format("{0:d4}", System.DateTime.Now.Year) + ".xls";

                    string caminho = vstrNomeArquivo;  //caminho onde será salvo o arquivo
                    string header = string.Empty;  //cabeçalho das colunas
                    string body = string.Empty; //Conteudo da grade (linhas)
                    FileStream fs = default(FileStream); //objeto para criação do arquivo
                    StreamWriter sw = default(StreamWriter); // objeto para escrita do arquivo
                    gvwVMRPT.AllowPaging = false;
                    gvwVMRPT.DataBind();

                    try
                    {
                        fs = new FileStream("\\arquivos + caminho, FileMode.Create); //criando o arquivo
                        sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("ISO-8859-1")); //usaremos o Encoding ISO-8859-1 para tratar a questão da acentuação
                    for (int i = 1; i < gvwVMRPT.Columns.Count + 1; i++)
                    {
                        header += gvwVMRPT.Columns[i - 1].HeaderText + "\t";  // preenche os nomes das colunas conforme está no GridView
                    }
                        sw.WriteLine(header);
                        sw.Flush();

                        for (int i = 0; i < gvwVMRPT.Rows.Count; i++)
                        {
                            for (int j = 0; j < gvwVMRPT.Columns.Count; j++)
                            {

                               body += gvwVMRPT.Rows[i].Cells[j].Text + "\t";
                            } // preenche as linhas da tabela conforme o GridView
                            sw.WriteLine(body);
                            sw.Flush();

                        body = "";
                        }                    
                    }
                    catch (System.Exception ex)

                    {
                    throw new Exception(ex.Message);
                    }

                    finally
                    {
                    fs.Close(); //fecha o arquivo
                    fs = null; sw = null;               
                    }

    Junior,

    Estou usando o código acima.

    Na minha máquina está funcionando, mas quando testo no servidor da dois erros:

    1º erro:

    Object reference not set to an instance of an object.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

    Source Error:
    Line 387:                finally
    Line 388:                {
    Line 389:                fs.Close(); //fecha o arquivo
    Line 390:                fs = null; sw = null;               
    Line 391:                }

    2º erro: Could not find a part of the path 'D:\arquivos\QUADRO_RESUMO_04072013.xls'

                                                        
    quinta-feira, 4 de julho de 2013 23:10
  • Alguém pode me ajudar?
    sexta-feira, 5 de julho de 2013 17:10
  • Guga o que ele esta falando é a respeito do caminho, esse caminho existe no servidor ?

    Junior

    sexta-feira, 5 de julho de 2013 17:52
  • Guga o que ele esta falando é a respeito do caminho, esse caminho existe no servidor ?

    Junior

          Junior,

          Eu queria pegar o caminho da máquina do usuário que estiver gerando o arquivo.

          Dessa forma abaixo funciona, quando eu rodo na minha máquina, mas não funciona quando rodo no servidor:       

          Environment.GetFolderPath(Environment.SpecialFolder.Desktop)

          Você sabe como faço pra pegar o caminho da máquina do usuário?

    sexta-feira, 5 de julho de 2013 19:27
  • opa isso nao é possivel lembre-se que seu processo é executado no seu servidor iis(já pensou vc estar numa página e ir alterando e lendo teus arquivos e pastas ? única coisa que podemos rodar no cliente é javascript), talvés com silverligth vc consiga, mais tem que instalar teu sistema silverligth no cliente.

    Junior

    • Marcado como Resposta Guga Oliveira segunda-feira, 15 de julho de 2013 19:05
    sexta-feira, 5 de julho de 2013 19:40
  • localmente dá certo, pq teu micro é ao mesmo tempo cliente e servidor já  que o VS simula um IIS na sua máquina.

    Junior

    sexta-feira, 5 de julho de 2013 19:42
  • opa isso nao é possivel lembre-se que seu processo é executado no seu servidor iis(já pensou vc estar numa página e ir alterando e lendo teus arquivos e pastas ? única coisa que podemos rodar no cliente é javascript), talvés com silverligth vc consiga, mais tem que instalar teu sistema silverligth no cliente.

    Junior

          Junior,  

          Como o sistema roda numa intranet, achei que daria pra fazer dessa forma.

          Valeu pela dica, vou ter de fazer de outra forma.

          O problema é que usando o Response para exportar(gerar) o arquivo, eu não consigo fechar a modal de aviso de exportação,       pois quando  termina a exportação o Response.End sai da rotina impedindo a modal de ser fechada.

            


    • Editado Guga Oliveira sexta-feira, 5 de julho de 2013 20:12 formatação
    sexta-feira, 5 de julho de 2013 20:11