Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

and.ardo

Exportar de um gridView para Excel

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.