带有模板字段的GridView导出到Excel

时间:2009-04-03 12:18:38

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

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

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

如果有人找到更好的解决方案,请在此处发布。对于那些正在敲打墙的其他开发人员来说,这可能非常有用。