0

次のコードを使用して HTML テーブルを作成し、それを XLS ファイルに保存してから Excel で開きます。

    public void ExportToSpreadsheet(DataTable table, string name)
    {
        HttpContext context = HttpContext.Current;
        context.Response.Clear();
        context.Response.Write("<table border=1>");

        context.Response.Write(Environment.NewLine);
        foreach (DataRow row in table.Rows)
        {
            context.Response.Write("<tr>");
            context.Response.Write("<td width=47>" + row[1].ToString().Replace(";", string.Empty) + "</td>");
            context.Response.Write("<td width=47>" + row[2].ToString().Replace(";", string.Empty) + "</td>");
            context.Response.Write("<td width=110>" + row[3].ToString().Replace(";", string.Empty) + "</td>");
            context.Response.Write("<td width=75>" + row[4].ToString().Replace(";", string.Empty) + "</td>");
            context.Response.Write("<td width=285>" + row[5].ToString().Replace(";", string.Empty) + "</td>");
            context.Response.Write("<td width=61>" + row[6].ToString().Replace(";", string.Empty) + "</td>");

            context.Response.Write("</tr>");
            context.Response.Write(Environment.NewLine);
        }
        context.Response.Write("</table>");
        context.Response.ContentType = "application/vnd.ms-excel";
        context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name + ".xls");
        context.Response.End(); 
    }

このコードはうまく機能しますが、ボタンから呼び出されます。レポートの実行後にそのボタンが存在するページの情報を更新したいのですが、ExportToSpreadsheet メソッドの後のコードは完全に無視されます。

だから私がするとき:

 ExportToSpreadsheet(dt, "MyReport");
 PopulateLastRun();

PopulatetoLastRun() にブレークポイントを設定できますが、そこに到達することはありません。誰でも理由を教えてもらえますか? これを回避する方法はありますか?

ありがとう

4

1 に答える 1

0

現在の応答でメソッドを呼び出しているcontext.Response.End()ため、その後コードは実行されません。

そのため、ファイルをフラッシュするには、呼び出す代わりに以下のコードを使用しますend()

context.Response.Flush();
于 2012-10-18T19:32:56.867 に答える