0

我有一个 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 上不存在。

有人可以帮助我吗?

4

1 回答 1

0

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

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

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

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

于 2009-04-03T13:57:14.057 回答