Вывести GridView в Excel за пределы страницы - PullRequest
0 голосов
/ 25 февраля 2011

Я хочу иметь вспомогательный класс, который может обслуживать запросы с нескольких страниц для вывода содержимого любого вида сетки, чтобы преуспеть.Но если я передаю 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();
    }
}

1 Ответ

1 голос
/ 25 февраля 2011

Для тех, у кого может быть эта проблема, решение состоит в том, чтобы добавить этот переопределенный метод на страницу, с которой приходит GridView:

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