0

我正在使用一种接受数据表并将其转换为 CSV 的方法。问题是,(1)当我尝试调用此方法时,将永远不会执行后续的进程/命令。(2)调用此方法后,调用表单中的列表框内容也被清除了。谁能帮我解决这个问题?我已包含以下方法以供参考。

public void DataTableToCSV(string fileName, DataTable dt)
{
    Response.Clear();
    Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.csv", fileName + DateTime.Now.ToString().Replace(" ", "").Replace(":", "").Replace(" ", "").Replace("/", "")));
    Response.Charset = "";
    Response.ContentType = "application/vnd.csv";
    System.IO.StringWriter sWriter;
    System.Text.StringBuilder sb = new System.Text.StringBuilder();

    sWriter = new System.IO.StringWriter(sb);
    string Str;
    for (int k = 0; k <= (dt.Columns.Count - 1); k++)
    {
        sWriter.Write(dt.Columns[k].ColumnName + ",");
    }

    sWriter.WriteLine(",");
    for (int i = 0; i <= (dt.Rows.Count - 1); i++)
    {
        for (int j = 0; j <= (dt.Columns.Count - 1); j++)
        {
            Str = (dt.Rows[i][j].ToString().Replace(",", ""));
            if (Str == "&nbsp;")
                Str = "";

            Str = (Str + ",");
            sWriter.Write(Str);
        }
        sWriter.WriteLine();
    }
    sWriter.Close();
    Response.Write(sb.ToString());
    Response.End();
}
4

2 回答 2

1

关于 (1) -内部Response.End()抛出ThreadAbortException,这基本上终止了正常的页面生命周期并“跳转”到EndRequest事件。因此,在调用之后的任何内容DataTableToCSV()都不会被调用。

希望这可以帮助..

于 2013-05-14T11:00:02.233 回答
0

创建返回 CSV 的第二个页面。在您的页面头部放置一个 Meta 刷新标签,该标签将重定向到该页面。因为响应是一个文件,所以你永远不会被重定向,但会出现文件保存对话框。

于 2013-05-14T11:08:31.683 回答