sábado, 22 de noviembre de 2008

Exportar los registros de un Gridview a Excel

Para ver y/o guardar el contenido de un gridview en un documento excel, vamos a utilizar un botón en cuyo evento click implementaremos la exportación.

Aunque nuestro gridview tenga paginación exportará todos sus registros.

protected void Button1_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter htw = new HtmlTextWriter(sw);

Page page = new Page();
HtmlForm form = new HtmlForm();

GridView1.EnableViewState = false;
GridView1.AllowPaging = false;
GridView1.DataBind();
page.EnableEventValidation = false;

page.DesignerInitialize();

page.Controls.Add(form);
form.Controls.Add(GridView1);

page.RenderControl(htw);

Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/ms-excel";
Response.AddHeader("Content- Disposition", "attachment;filename=nombreDocumento.xls");
Response.Charset = "UTF-8";

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentEncoding = System.Text.Encoding.Default;
Response.Write(sb.ToString());
Response.End();
}

3 comentarios:

Erick Fernando Gaillard Castañeda dijo...

good me sirvio mucho aqui te pongo el codigo en vb:
Dim sb As New StringBuilder()
Dim sw As New IO.StringWriter(sb)
Dim htw As New HtmlTextWriter(sw)
Dim pagina As Page = New Page
Dim form As New HtmlForm
GridView3.EnableViewState = False
GridView3.AllowPaging = False
GridView3.DataBind()
pagina.EnableEventValidation = False
pagina.DesignerInitialize()
pagina.Controls.Add(form)
form.Controls.Add(GridView3)
pagina.RenderControl(htw)
Response.Clear()
Response.Buffer = True
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader("Content-Disposition", "attachment;filename=Request.xls")
Response.Charset = "UTF-8"
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.ContentEncoding = System.Text.Encoding.[Default]
Response.Write(sb.ToString())
Response.End()

Patricia Grueso Agudo dijo...

Muchas gracias a ti Erick!

Anónimo dijo...

Muchas gracias me sirvió mucho.

Saludos.