Nella codice della pagina asp.net:
protected void Button_Click(object sender, ImageClickEventArgs e)
{
this.RenderToHtml(GVDetails, "foo.xls");
}
private void RenderToHtml(GridView gv, string fileName)
{
_bypassNormalVRISF = true; Response.Clear();
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gv.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}
private bool _bypassNormalVRISF = false;
public override void VerifyRenderingInServerForm(Control control)
{
if (_bypassNormalVRISF)
return;
else
base.VerifyRenderingInServerForm(control);
}
Per i dettagli su VerifyRenderingInServerForm vedere il sito MSDN. Comunque in 2 parole: molti (tutti?) dei controlli Asp.net devono essere creati al di sotto di <form runat="server">
Il metodo viene chiamato da questi controlli, tra cui GridView. L'implementazione standard di Page prevede che venga sollevata un eccezione se in quel momento la costruzione della pagina non è "al di sotto" di <form runat="server"> . Basta andare in override sul metodo e fargli fare una porcheria: saltare il controllo! Ovviamente è bene farlo solo quando serve: per questo c'è _bypassNormalVRISF.
Nessun commento:
Posta un commento