我正在使用一种接受数据表并将其转换为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();
}
答案 0 :(得分:1)
关于(1) - Response.End()
在内部抛出ThreadAbortException
,这基本上终止了正常的页面生命周期并且“跳到”EndRequest
事件。因此,在调用DataTableToCSV()
之后不会立即调用任何内容。
希望这会有所帮助..
答案 1 :(得分:0)
创建一个返回CSV的第二页。将Meta刷新标记放在页面的头部,重定向到此页面。由于响应是一个文件,您实际上永远不会被重定向,但会出现文件保存对话框。