c#导出到CSV问题

本文关键字:CSV 问题 | 更新日期: 2023-09-27 18:13:41

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

c#导出到CSV问题

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

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