ARTÍCULO DESACTUALIZADO
Este artículo es algo viejo, encuentras una mejor forma de hacer la exportación en este otro artículo.
En algunas ocasiones queremos que toda la información que estamos desplegando con un GridView
se exporte automáticamente a un archivo de Excel desde nuestra aplicación ASP.NET 2.
Para hacerlo, basta colocar un GridView
vacío en nuestra página (puede ser uno diferente al que utilizas para mostrar la información en HTML).
- <asp:GridView ID="GridViewExcel" runat="server">
- </asp:GridView>
También necesitamos un botón que al ser presionado haga la exportación:
- <asp:LinkButton ID="ExportarAExcel" runat="server">Exportar a Excel</asp:LinkButton>
Por último, aquí está el código que hace la exportación:
- Protected Sub ExportarAExcel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ExportarAExcel.Click
- Dim gv As GridView
- gv = Page.Master.FindControl("form1").FindControl("Cuerpo").FindControl("GridviewExcel")
- 'Estoy obteniendo la información de mi Business Logic Layer, pero lo puedes hacer
- 'de la manera en la que estés acostumbrado
- Dim Logica As New BLLUsers()
- Dim DTable As DSEmpresa.usersDataTable
- DTable = Logica.GetData()
- gv.DataSource = DTable
- gv.DataBind()
- 'Exportar a Excel
- Response.Clear()
- Response.Buffer = True
- Response.ContentType = "application/vnd.ms-excel;"
- Response.ContentEncoding = System.Text.Encoding.UTF7
- Response.Charset = ""
- Me.EnableViewState = False
- Dim oStringWriter As System.IO.StringWriter = New System.IO.StringWriter
- Dim oHtmlTextWriter As System.Web.UI.HtmlTextWriter = New System.Web.UI.HtmlTextWriter(oStringWriter)
- 'Me.ClearControls(dg)
- gv.RenderControl(oHtmlTextWriter)
- Response.Write(oStringWriter.ToString())
- Response.End()
- End Sub
- Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
- 'Este override debe estar aqui ya que si no aparecera un error
- 'indicando que el Gridview debe estar dentro de un form runat=server
- End Sub
Actualización
Si por alguna razón obtienes el error:
RegisterForEventValidation can only be called during Render
intenta colocar EnableEventValidation="false"
en la directiva de la página, de tal forma que quede algo así:
- <%@ Page Title="" Language="VB" MasterPageFile="~/MasterPages/Principal.master" AutoEventWireup="false" CodeFile="Ejemplo.aspx.vb" Inherits="Ejemplo" EnableEventValidation="false" %>
me marca DSEmpresa.usersDataTable is not definited
asi como BLLUsers
Hola Pablo, es porque DSEmpresa es mi DataSet y BLLUsers es mi Business Logic. Esas las tienes que crear tú por tu cuenta. Si necesitas aprender sobre cómo hacerlo te recomiendo http://www.asp.net
Saludos.