and.ardo 0 Denunciar post Postado Junho 21, 2012 Olá pessoal. Sabe quando agente estima um prazo para o término do projeto e na sua agenda existem aquelas funções que você pensa "putz...isso aqui..faço em 30 minutos..." pois é né, já devem imaginar... os 30 minutos já se transformaram em horas e horas de dor de cabeça. O que acontece, tenho uma página Asp.Net e no click do botão eu preciso exportar o conteúdo de um gridView para Excel, as funções que tentei usar todas elas passam pela mesma linha (segue abaixo): Linhas que origina o erro: Response.End(); Exceção: "Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack." Aqui segue o código completo que tenho usado: (pelo que entendi, o erro acontece porque eu tento finalizar algo que ainda não terminou de processar, há idéia de paralizar o código por um tempo antes de fechar, não deu certo.) protected void Button2_Click(object sender, EventArgs e) { try { Class1 oCls = new Class1(); GridView1.PageIndex = 0; GridView1.DataSource = null; GridView1.DataSource = oCls.CargaLLIst().DefaultView; GridView1.DataBind(); if (GridView1.Rows.Count > 0) { GridView1.AllowSorting = false; System.IO.StringWriter sw = new System.IO.StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); System.Web.UI.HtmlControls.HtmlForm form = new System.Web.UI.HtmlControls.HtmlForm(); Response.ClearContent(); Response.AddHeader("content-disposition", "attachment; filename=flow.xls"); Response.ContentType = "application/ms-excel"; Response.Charset = ""; EnableViewState = false; Controls.Add(form); form.Controls.Add(GridView1); form.RenderControl(htw); String strExcel = sw.ToString(); Response.Write(sw.ToString()); [b]Response.End();[/b] GridView1.AllowSorting = true; } } catch (Exception ex) { avisoLabel.Text = ex.Message; } } public override void VerifyRenderingInServerForm(Control control) { } Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Junho 22, 2012 Mas você esta jogando todo o formulário? Por que não exporta somente o datasource? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
and.ardo 0 Denunciar post Postado Junho 25, 2012 Olá bom dia. Então, eu já testei de várias formas esse código e outros que peguei na net e todos renderizando o formulario ou mesmo o gridView geram a tal exceção. Abaixo segue mais 1 dos muitos códigos que tenho aqui para esta finalidade e todos não funcionam, geram o mesmo erro. //limpo a resposta do HTTP Response.Clear(); //adiciono o cabeçalho que faz o .Net entender que se trata de um xls Response.AddHeader("content-disposition", "attachment;filename=Arquivo.xls"); //zero o charset Response.Charset = ""; //desabilito o cache do browser Response.Cache.SetCacheability(HttpCacheability.NoCache); //Seto o content type para xls Response.ContentType = "application/vnd.xls"; //Crio um String Writer System.IO.StringWriter sWr = new System.IO.StringWriter(); //Transformo em HTML String Writer System.Web.UI.HtmlTextWriter hWr = new HtmlTextWriter(sWr); //Mando o datagrid (que deve ser criado antes de renderizar o HtmlTextWriter criado... aprovacaoGridView.RenderControl(hWr); //mando escrever na tela. Com todos os cabeçalhos setados, é aberto para salvar o XML Response.Write(sWr.ToString()); //Fecho a resposta. Response.End(); Este código assim como os comentários foram copiados da net. O autor o deixou bem didático + mesmo assim o negócio ainda não funciona...não enxergo onde possa estar o erro, talvez no meu pc... Compartilhar este post Link para o post Compartilhar em outros sites