Código para exportação:private void ExportExcel() {
Response.Clear();
exportando = true;
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.xls";
StringWriter stringWrite = new System.IO.StringWriter();
HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
this.EnableViewState = false;
gridview1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
Parece bem simples o código, mas em .NET sempre tem um truque para não receber aquela exception linda na tela...
A parte do segredo agora: public override void VerifyRenderingInServerForm(Control control)
{
if (!exportando)
{
base.VerifyRenderingInServerForm(control);
}
}
Se não for incluido este override na página ocorre a seguinte exception:Controle 'gridview1' do tipo 'GridView' deve ser inserido em uma marca de formato com runat=server.
Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.
Detalhes da Exceção: System.Web.HttpException: Controle 'gridview1' do tipo 'GridView' deve ser inserido em uma marca de formato com runat=server.
Erro de Origem:
Linha 57: HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
Linha 58: this.EnableViewState = false;
Linha 59: gridview1.RenderControl(htmlWrite);
Linha 60:
Linha 61: Response.Write(stringWrite.ToString());
Arquivo de Origem: c:\Inetpub\wwwroot\PublicadorTerraTV\trunk\PublisherWebSite\ExportTree.aspx.cs Linha: 59
Rastreamento de Pilha:
[HttpException (0x80004005): Controle 'gridview1' do tipo 'GridView' deve ser inserido em uma marca de formato com runat=server.]
System.Web.UI.Page.VerifyRenderingInServerForm(Control control) +2049759
System.Web.UI.WebControls.GridView.Render(HtmlTextWriter writer, Boolean renderPanel) +37
System.Web.UI.WebControls.GridView.Render(HtmlTextWriter writer) +30
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +25
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +121
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +22
Terra.Publicador.View.ExportTree.ExportExcel() in c:\Inetpub\wwwroot\PublicadorTerraTV\trunk\PublisherWebSite\ExportTree.aspx.cs:59
Terra.Publicador.View.ExportTree.lnkExport_OnClick(Object sender, EventArgs e) in c:\Inetpub\wwwroot\PublicadorTerraTV\trunk\PublisherWebSite\ExportTree.aspx.cs:41
System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +86
System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +115
System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746
--------------------------------------------------------------------------------
É aquele erro que vc pergunta que diabos eu fiz de errado...