Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将GridView输出到页面外部的Excel_C#_Asp.net_Gridview_Httpcontext - Fatal编程技术网

C# 将GridView输出到页面外部的Excel

C# 将GridView输出到页面外部的Excel,c#,asp.net,gridview,httpcontext,C#,Asp.net,Gridview,Httpcontext,我希望有一个助手类,它可以为来自多个页面的请求提供服务,以便将任何gridview的内容输出到excel。但是如果我传入GridView,它会抛出一个错误,它必须在“form runat='server'”标记中,这是有意义的。但是,在一个不直接连接到任何特定页面的单独类中,是否仍然可以这样做 代码如下: public class Export { public static void ToExcel(GridView control, params string[] header

我希望有一个助手类,它可以为来自多个页面的请求提供服务,以便将任何gridview的内容输出到excel。但是如果我传入GridView,它会抛出一个错误,它必须在“form runat='server'”标记中,这是有意义的。但是,在一个不直接连接到任何特定页面的单独类中,是否仍然可以这样做

代码如下:

  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();
    }
}
公共类导出
{
公共静态void ToExcel(GridView控件,参数字符串[]头)
{
HttpResponse context=System.Web.HttpContext.Current.Response;
AddHeader(“内容处置”、“附件;文件名=Report.xls”);
context.ContentType=“application/vnd.ms excel”;
context.Charset=“”;
StringWriter StringWriter=新StringWriter();
HtmlTextWriter htmlWriter=新的HtmlTextWriter(stringWriter);
stringWriter.GetStringBuilder().Append(“”);
stringWriter.GetStringBuilder().Append(
); stringWriter.GetStringBuilder().Append(
); stringWriter.GetStringBuilder().Append(
); stringWriter.GetStringBuilder().Append(
); stringWriter.GetStringBuilder().Append(
); stringWriter.GetStringBuilder().Append(
); stringWriter.GetStringBuilder().Append(
); stringWriter.GetStringBuilder().Append(“”); stringWriter.WriteLine(“使用报告:”); stringWriter.GetStringBuilder().Append(“”); stringWriter.GetStringBuilder().Append(
); stringWriter.GetStringBuilder().Append(
); stringWriter.GetStringBuilder().Append(“”); stringWriter.GetStringBuilder().Append(“”); stringWriter.GetStringBuilder().Append(“”); stringWriter.GetStringBuilder().Append(“”); foreach(头中的字符串str) { stringWriter.Write(str); stringWriter.GetStringBuilder().Append(
); } stringWriter.GetStringBuilder().Append(“”); stringWriter.GetStringBuilder().Append(“”); stringWriter.GetStringBuilder().Append(“”); 控件。渲染控件(htmlWriter); stringWriter.GetStringBuilder().Append(“”); Write(stringWriter.ToString()); context.End(); } }
对于可能存在此问题的任何人,解决方案是将此重写方法添加到GridView所在的页面:

    public override void VerifyRenderingInServerForm(Control control)
    {
        return;
    }