Domanda

Ho un GridView wich ha alcuni campi di programmazione dei modelli aggiunti ad esso su Page_Load e su ogni postback (perché, per qualche motivo, questi campi perdono il loro valore durante il postback).

Ha funzionato bene, quindi non ho pensato più in merito alla questione postback.

Ora sto cercando di esportare che GridView in Excel. Sto utilizzando il seguente codice:

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

Il problema è che tutte le colonne sono resi al file Excel, tranne i campi del modello, che vengono lasciati in bianco.

Credo che il problema è legato al fatto che i campi del modello perdono i loro valori su ogni postback. Ho cercato su di esso e ho trovato gente che dice che questi campi dinamici dovrebbero essere aggiunti su Page_Init, non su Load. Non sono sicuro che questo è vero, tuttavia, ho bisogno di creare quei campi in base alle informazioni che ricevo attraverso HttpRequest, che non è lì sul Init, se non sbaglio.

Qualcuno mi può aiutare in questo?

È stato utile?

Soluzione

Ho trovato un sacco di persone con problemi come questo, ma molto poche risposte che mi potrebbero aiutare.

Fino a questo: http://forums.asp.net/p/1229438/2216336.aspx# 2216336

Questo può davvero risolvere il mio problema. Ho fatto alcuni test e funziona. E 'riuscito a salvare i campi del modello nella cache e ripristinarli su Load. Clever.

Se qualcuno trova una soluzione migliore, si prega di postare qui. Può essere molto utile per gli altri sviluppatori compagni che stanno sbattere la testa sul muro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top