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á.