我有一个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上。
有人可以帮助我吗?
答案 0 :(得分:0)
我发现很多人都有这样的问题,但很少有答案可以帮助我。
直到这一个: http://forums.asp.net/p/1229438/2216336.aspx#2216336
这可以解决我的问题。我做了一些测试,但它确实有效。 他设法将模板字段保存在缓存中并在Page_Load上恢复它们。聪明。
如果有人找到更好的解决方案,请在此处发布。对于那些正在敲打墙的其他开发人员来说,这可能非常有用。