0

リピーターを設定できましたが、唯一の問題は、それを Excel シートにエクスポートすることです。Excel ファイルに表示されるデータはありません。私が考えているのは、エクスポートボタンをクリックしたときのポストバックのために、リピーターのデータが削除されるか何かであるということです。コードは次のとおりです。

        Response.Clear();
        Response.Buffer = true;

        Response.AddHeader("content-disposition",
         "attachment;filename=GridViewExport.xls");
        Response.Charset = "";
        Response.ContentType = "application/vnd.ms-excel";
        StringWriter sw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        Table tb = new Table();
        TableRow tr1 = new TableRow();
        TableCell cell1 = new TableCell();
        cell1.Controls.Add(Repeater1);
        tr1.Cells.Add(cell1);
        tb.Rows.Add(tr1);
        tb.RenderControl(hw);

        //style to format numbers to string
        string style = @"<style> .textmode { mso-number-format:\@; } </style>";
        Response.Write(style);
        Response.Output.Write(sw.ToString());
        Response.Flush();
        Response.End();
4

2 に答える 2

1

Excel 形式でデータをエクスポートするには、文字列を記述する代わりにEPPlusライブラリを使用することをお勧めします。

EPPlus は、Open Office Xml 形式 (xlsx) を使用して Excel 2007/2010 ファイルを読み書きする .net ライブラリです。 

EPPlus のサポート: セル範囲、セル スタイル (境界線、色、塗りつぶし、フォント、数値、配置)、グラフ、画像、図形、コメント、テーブル、保護、暗号化、ピボット テーブル、データ検証

于 2012-05-16T22:33:08.960 に答える
0

Page(Page.Controls.Add(tb))に"Repeater1"とテーブル"tb"をアタッチする必要があると思います。試してみてください:

  • コントロールを文字列にレンダリングします var rendered=RenderControlToString(tb);
  • 次に、応答をクリアします Response.Clear();
  • 次に、レンダリングされた文字列を書き込みます Response.Write(rendered);

    public static string RenderControlToString(Control c)
    {
        StringBuilder sb = new StringBuilder();
        StringWriter sw = new StringWriter(sb);
        HtmlTextWriter htmlWriter = new HtmlTextWriter(sw);
        c.RenderControl(htmlWriter);
        sw.Close();
        htmlWriter.Close();
        return sb.ToString();
    
    }
    
于 2012-05-17T05:32:06.847 に答える