2011-02-24 31 views
0

我想要一个帮助器类,它可以处理来自多个页面的请求,以将任何gridview的内容输出到excel。但是,如果我通过GridView传入一个错误,它必须在“form runat ='server'”标签内,这是有道理的。但是,无论如何,在一个不直接与任何特定页面相关的单独课程中这样做?在页面之外输出一个GridView到Excel

下面是代码:

public class Export 
{ 
    public static void ToExcel(GridView control, params string[] headers) 
    { 
     HttpResponse context = System.Web.HttpContext.Current.Response; 

     context.AddHeader("content-disposition", "attachment;filename=Report.xls"); 
     context.ContentType = "application/vnd.ms-excel"; 
     context.Charset = ""; 

     StringWriter stringWriter = new StringWriter(); 
     HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter); 

     stringWriter.GetStringBuilder().Append("<img src='C:\\logo.png'/>"); 
     stringWriter.GetStringBuilder().Append("<br />"); 
     stringWriter.GetStringBuilder().Append("<br />"); 
     stringWriter.GetStringBuilder().Append("<br />"); 
     stringWriter.GetStringBuilder().Append("<br />"); 
     stringWriter.GetStringBuilder().Append("<br />"); 
     stringWriter.GetStringBuilder().Append("<br />"); 
     stringWriter.GetStringBuilder().Append("<br />"); 
     stringWriter.GetStringBuilder().Append("<B>"); 
     stringWriter.WriteLine("Usage Report: "); 
     stringWriter.GetStringBuilder().Append("</B>"); 
     stringWriter.GetStringBuilder().Append("<br>"); 
     stringWriter.GetStringBuilder().Append("<br>"); 
     stringWriter.GetStringBuilder().Append("<table>"); 
     stringWriter.GetStringBuilder().Append("<tr>"); 
     stringWriter.GetStringBuilder().Append("<td colspan=4 bgcolor=Gainsboro align=center>"); 
     stringWriter.GetStringBuilder().Append("<B>"); 

     foreach (string str in headers) 
     { 
      stringWriter.Write(str); 
      stringWriter.GetStringBuilder().Append("<br />"); 
     } 

     stringWriter.GetStringBuilder().Append("</B>"); 
     stringWriter.GetStringBuilder().Append("</td>"); 
     stringWriter.GetStringBuilder().Append("</tr>"); 

     control.RenderControl(htmlWriter); 

     stringWriter.GetStringBuilder().Append("</table>"); 
     context.Write(stringWriter.ToString()); 
     context.End(); 
    } 
} 

回答

1

对于任何人谁可能有这个问题的解决方案是增加这种overrided方法的页面在GridView是来自:

public override void VerifyRenderingInServerForm(Control control) 
    { 
     return; 
    } 
相关问题