【问题标题】:Write gridview to excel page将gridview写入excel页面
【发布时间】:2009-09-11 19:46:01
【问题描述】:

我收到以下错误

Error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.

我想把网格放在excel onclick

Sub bttntxtfile_Click(ByVal sender As Object, ByVal e As EventArgs)
    GridViewExportUtil.Export("Customers.xls", GridView1)
End Sub

public class GridViewExportUtil
{

public static void Export(string fileName, GridView gv)
{
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.AddHeader(
        "content-disposition", string.Format("attachment; filename={0}", fileName));
    HttpContext.Current.Response.ContentType = "application/ms-excel";

    using (StringWriter sw = new StringWriter())
    {
        using (HtmlTextWriter htw = new HtmlTextWriter(sw))
        {
            //  Create a form to contain the grid
            Table table = new Table();

            //  add the header row to the table
            if (gv.HeaderRow != null)
            {
                GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
                table.Rows.Add(gv.HeaderRow);
            }

            //  add each of the data rows to the table
            foreach (GridViewRow row in gv.Rows)
            {
                GridViewExportUtil.PrepareControlForExport(row);
                table.Rows.Add(row);
            }

            //  add the footer row to the table
            if (gv.FooterRow != null)
            {
                GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
                table.Rows.Add(gv.FooterRow);
            }

            //  render the table into the htmlwriter
            table.RenderControl(htw);

            //  render the htmlwriter into the response
           HttpContext.Current.Response.Write(sw.ToString());

        }
    }
}

/// <summary>
/// Replace any of the contained controls with literals
/// </summary>
/// <param name="control"></param>
private static void PrepareControlForExport(Control control)
{
    for (int i = 0; i < control.Controls.Count; i++)
    {
        Control current = control.Controls[i];
        if (current is LinkButton)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
        }
        else if (current is ImageButton)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
        }
        else if (current is HyperLink)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
        }
        else if (current is DropDownList)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
        }
        else if (current is CheckBox)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
        }

        if (current.HasControls())
        {
            GridViewExportUtil.PrepareControlForExport(current);
        }
    }
}
}

我有两个 response.redirects,但我将它们注释掉了,但仍然出现错误。有没有人见过这个错误?我做错了吗?

我认为这与 httpcontext.current.response.clear 和 httpContext.current.response.addheader 行有关

【问题讨论】:

    标签: c# asp.net vb.net visual-studio export-to-excel


    【解决方案1】:

    如果您的“导出到 Excel”按钮位于更新面板内,则调用 Response.Write() 可能会导致“PageRequestManagerParserErrorException”。从更新面板中删除按钮或使用PostBackTrigger

    有关更多信息,请参阅this 文章。

    【讨论】:

    • 谢谢。如此简单的答案,我在任何地方都找不到。 +1 并接受答案
    【解决方案2】:

    这应该有帮助..

    更多的是关于读取/写入数据到 excel,而不是专门从 gridview,但任何 .net 程序员都应该能够做到这一点..

    http://support.microsoft.com/kb/316934#10

    【讨论】:

    • 是的。如果我无法找出这个错误,这是我的下一个选择。我认为不同之处在于我将网格直接复制到 excel 中,而不是将文本写入 excel 工作表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多