Usuário com melhor resposta
Exibir a imagem de um load(carregando), conforme a exportação de dados de um gridview para Excel:

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?
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
Todas as Respostas
-
-
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();
-
-
-
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?
-
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
-
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?
-
-
-
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
-
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
-
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'
-
-
-
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?
-
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
-
-
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