Olá a todos.

 

Neste artigo veremos como exportar dados contidos em um GridView para documentos do tipo Word e Excel.

 

Nosso exemplo será bastante simples, pois utilizaremos recursos do próprio .Net para realizarmos a exportação.

 

Crie um projeto do tipo Web Application com uma página – Default.aspx e uma classe – Exporter.cs.

 

A página Default.aspx conterá os controles:

  • GridView;
  • SqlDataSource;
  • Button

 


 

 

Este GridView está vinculado à um SqlDataSource que contem um select simples, o que faz com que o GridView seja preenchido com os dados de uma tabela ao executar a aplicação. Aqui o leitor poderá fazer o mesmo procedimento ou utilizar outras maneiras de preencher o GridView.

 

Vamos iniciar a codificação de nossa classe que será a responsável ela exportação.

 

Primeiramente ver as referências necessárias:

 



using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;


 

Faremos a exportação para dois  tipos de arquivos – Word e Excel. Sabendo disso podemos criar um Enum de nome FileType, que refletirá os dois tipos de arquivos suportados para a exportação:


public enum FileType
    {
        Excel = 0,
        Doc = 1
    }   


Agora faremos um método privado que fará a exportação propriamente dita.


private static void ExportGrid(GridView pGrid, FileType pType, string pFileName)
    {
        string ext = "";
        switch (pType)
        {
            case FileType.Excel:
                ext = ".xls";
                break;
            case FileType.Doc:
                ext = ".doc";
                break;
 
        }
        System.Web.UI.Page page = new Page();
        string attachment = "attachment; filename=" + pFileName + ext;
        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.AddHeader("content-disposition", attachment);
        HttpContext.Current.Response.ContentType = "application/ms-excel";
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        HtmlForm form = new HtmlForm();
        Panel pan = new Panel();
        pan.Style.Add(HtmlTextWriterStyle.TextAlign, "center");
        pan.Controls.Add(pGrid);
        form.Controls.Add(pGrid);
        page.Controls.Add(form);
        form.RenderControl(htw);
        HttpContext.Current.Response.Write(sw.ToString());
        HttpContext.Current.Response.End();
    }

 

Basicamente esse método recebe um GridView, um Enum do tipo FileType e uma string correspondente ao nome do arquivo que será gerado. De acordo com o Enum FileType, é escolhida uma extensão para o arquivo, definindo assim o tipo de arquivo a ser criado. Posteriormente são criados controles do tipo Panel e HtmlForm, sendo que o GridView passado como parâmetro será adicionado ao Panel e este será adicionado ao HtmlForm. Com o HtmlForm preenchido com o Panel contendo o GridView, mandamos renderizar o Form para finalmente chamarmos o objeto HttpResponse para gerar o arquivo e dar a opção de download deste.

 

Na próxima parte do artigo, criaremos alguns métodos complementares que serão necessários para a exportação. Até lá.