Pergunta

Eu tenho um GridView wich tem alguns campos programaticamente modelo adicionado a ele sobre Page_Load e em cada PostBack (porque, por algum motivo, esses campos perder o seu valor no postback).

Ele trabalhou muito bem, então eu não pensava mais sobre o assunto PostBack.

Agora eu estou tentando exportar essa GridView para o Excel. Eu estou usando o seguinte código:

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();
}

O problema é que todas as colunas são processados ??para o arquivo Excel, exceto os campos do modelo, que estão em branco esquerdo.

Eu acho que o problema está relacionado com o fato de que os campos do modelo perder seus valores em cada PostBack. Eu procurei sobre isso e as pessoas encontradas dizendo que esses campos dinâmicos deve ser adicionado em Page_Init, e não em Page_Load. Eu não tenho certeza que isso é verdade, no entanto eu preciso para criar esses campos com base em informações que eu recebo através HttpRequest, que não está lá em Init, se não estou enganado.

Alguém pode me ajudar nisto?

Foi útil?

Solução

Eu encontrei um monte de pessoas com problemas como este, mas muito poucas respostas que poderiam me ajudar.

Até esta: http://forums.asp.net/p/1229438/2216336.aspx# 2216336

Isso pode realmente resolver o meu problema. Eu fiz alguns testes e ele funciona. Ele conseguiu salvar os campos do modelo em cache e restaurá-los em Page_Load. Inteligente.

Se alguém encontrar uma solução melhor, por favor, postá-lo aqui. Pode ser muito útil para outros desenvolvedores de companheiros que estão batendo a cabeça na parede.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top