我有一个 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 上不存在。
有人可以帮助我吗?