2009-04-03 11 views
0

私はGridViewをいくつか持っていますが、何らかの理由でこれらのフィールドがPostBackの値を失うため、Page_Loadと各PostBackにテンプレートフィールドが追加されています。GridView with ITemplateフィールドがExcelにエクスポートされます

これはうまくいきましたので、私は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ファイルにレンダリングされていることです。

私はこの問題は、Templateフィールドが各PostBackの値を失うという事実と関連していると思います。私はそれについて検索し、これらの動的フィールドはPage_LoadではなくPage_Initに追加する必要があると人々に言っていました。私はこれが本当であるかどうかはわかりませんが、HttpRequestを介して取得した情報に基づいてフィールドを作成する必要があります。

誰かが私を助けることができますか?

答えて

0

私はこのような問題を抱えている多くの人を見つけましたが、助けになる回答はほとんどありませんでした。

1本まで: http://forums.asp.net/p/1229438/2216336.aspx#2216336

これは本当に私の問題を解決することができます。私はいくつかのテストをして、それは動作します。 彼は、テンプレートフィールドをキャッシュに保存してPage_Loadに復元することができました。賢い

誰かがより良い解決策を見つけた場合は、ここに投稿してください。壁に頭を叩いている他の仲間の開発者にとっては非常に便利です。

+0

Init(上書きまたはイベント)にテンプレートフィールドを作成する必要があります。リクエストはその時点で利用可能であり、すべてのコントロールの状態は保持されます。何もキャッシュする必要はありません。 – Ruslan

関連する問題