C#导出为CSV问题

时间:2013-05-14 09:55:59

标签: c# .net httpwebresponse

我正在使用一种接受数据表并将其转换为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();
}

2 个答案:

答案 0 :(得分:1)

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

希望这会有所帮助..

答案 1 :(得分:0)

创建一个返回CSV的第二页。将Meta刷新标记放在页面的头部,重定向到此页面。由于响应是一个文件,您实际上永远不会被重定向,但会出现文件保存对话框。