C# 带有ITemplate字段的GridView导出到Excel

C# 带有ITemplate字段的GridView导出到Excel,c#,asp.net,gridview,postback,export-to-excel,C#,Asp.net,Gridview,Postback,Export To Excel,我有一个GridView,它在页面加载和每次回发时都以编程方式添加了一些模板字段(因为,出于某种原因,这些字段在回发时失去了它们的值) 它工作得很好,所以我不再考虑回发问题 现在我正试图将GridView导出到Excel。我正在使用以下代码: protected void ExportToExcel_Click(object sender, EventArgs e) { string attachment = "attachment; filename=ExcelFile.xls";

我有一个GridView,它在页面加载和每次回发时都以编程方式添加了一些模板字段(因为,出于某种原因,这些字段在回发时失去了它们的值)

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

现在我正试图将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文件中

我认为问题在于模板字段在每次回发时都会失去其值。我搜索了一下,发现有人说这些动态字段应该添加到Page_Init上,而不是Page_Load上。我不确定这是真的,但是我需要根据我通过HttpRequest获得的信息创建这些字段,如果我没有弄错的话,这在Init上是不存在的


有人能帮我吗?

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

在此之前:

这真的可以解决我的问题。我做了一些测试,效果很好。 他设法将模板字段保存在缓存中,并在页面加载时恢复它们。聪明


如果有人找到更好的解决方案,请在这里发布。它对其他正在碰壁的开发人员非常有用。

您应该在Init(覆盖或事件)上创建模板字段。此时请求可用,所有控件的状态都将保留。不需要缓存任何东西。