【问题标题】:GridView with ITemplate fields export to Excel带有 ITemplate 字段的 GridView 导出到 Excel
【发布时间】:2009-04-03 12:18:38
【问题描述】:

我有一个 GridView,它在 Page_Load 和每个 PostBack 上都以编程方式添加了一些模板字段(因为出于某种原因,这些字段在 PostBack 上失去了它们的价值)。

它工作得很好,所以我不再考虑 PostBack 问题。

现在我正在尝试将该 GridView 导出到 Excel。我正在使用以下代码:

protected void ExportToExcel_Click(object sender, EventArgs e)
{
    string attachment = "attachment; filename=ExcelFile.xls";
    Response.ClearContent();
    Response.AddHeader("content-disposition", attachment);
    Response.ContentType = "application/vnd.xls";
    Response.Charset = "utf-8";
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1250");
    StringWriter sw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);

    // Create a form to contain the grid
    HtmlForm frm = new HtmlForm();
    this.gridValores.Parent.Controls.Add(frm);
    frm.Attributes["runat"] = "server";
    frm.Controls.Add(this.gridView);
    frm.RenderControl(htw);
    Response.Write(sw.ToString());
    Response.End();
}

问题是除了模板字段之外的所有列都呈现到 Excel 文件中,这些字段留空。

我认为问题与模板字段在每个 PostBack 上丢失其值的事实有关。我搜索了一下,发现有人说这些动态字段应该添加到 Page_Init 上,而不是 Page_Load 上。我不确定这是不是真的,不过我需要根据通过 HttpRequest 获得的信息创建这些字段,如果我没记错的话,Init 上不存在这些信息。

有人可以帮我吗?

【问题讨论】:

    标签: c# asp.net gridview postback export-to-excel


    【解决方案1】:

    我发现很多人都有这样的问题,但能帮助我的答案却很少。

    直到这个: http://forums.asp.net/p/1229438/2216336.aspx#2216336

    这真的可以解决我的问题。我已经做了一些测试并且它有效。 他设法将模板字段保存在缓存中并在 Page_Load 上恢复它们​​。聪明。

    如果有人找到更好的解决方案,请在此处发布。对于其他正在拼命挣扎的开发人员来说,它可能非常有用。

    【讨论】:

    • 您应该在 Init(覆盖或事件)上创建模板字段。此时请求可用,所有控件都将保留其状态。无需缓存任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2013-09-25
    • 1970-01-01
    相关资源
    最近更新 更多