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 == " ")
Str = "";
Str = (Str + ",");
sWriter.Write(Str);
}
sWriter.WriteLine();
}
sWriter.Close();
Response.Write(sb.ToString());
Response.End();
}
关于(1)- Response.End()
在内部抛出ThreadAbortException
,这基本上终止了正常的页面生命周期并"跳转"到EndRequest
事件。因此,紧跟在DataTableToCSV()
调用之后的任何东西都不会被调用。
创建返回CSV的第二个页面。在页面的头部放一个元刷新标签,重定向到该页。因为响应是一个文件,所以您实际上永远不会被重定向,但是会出现文件保存对话框。