使用“保存文件”对话框将数据表导出为CSV - C#

时间:2012-06-22 14:44:14

标签: c# asp.net

努力让我的CSV导出显示“保存文件”对话框。它保存到文件ok,但不允许用户保存。任何人都可以看到代码出错的地方吗?

string filename = Server.MapPath("~/download.csv");
StreamWriter sw = new StreamWriter(filename, false);

int iColCount = dt.Columns.Count;
for (int i = 0; i < iColCount; i++)
{
    sw.Write(dt.Columns[i]);
    if (i < iColCount - 1)
    {                
        sw.Write(",");
    }
}
sw.Write(sw.NewLine);

foreach (DataRow dr in dt.Rows)
{
    for (int i = 0; i < iColCount; i++)
    {
        if (!Convert.IsDBNull(dr[i]))
        {
            sw.Write(dr[i].ToString());
        }
        if (i < iColCount - 1)
        {
            sw.Write(",");
        }
    }
    sw.Write(sw.NewLine);
}
sw.Close();

Response.Clear();
Response.ContentType = "application/csv";
Response.AddHeader("Content-Disposition", "attachment; filename=download.csv");
Response.WriteFile(filename);
Response.Flush();
Response.End();

我认为内容处理行提出了对话框,但也许我还需要做其他事情。

由于

3 个答案:

答案 0 :(得分:2)

啊,已经发现了问题所在......

我在更新面板中找到了按钮,并没有意识到响应对象在更新面板中不起作用。

我将下载按钮设为触发器,现在效果很好。

<Triggers>
    <asp:PostBackTrigger ControlID="btnDownload" />
</Triggers>

感谢您的建议

答案 1 :(得分:0)

我很确定你需要

Response.Write()

之后

Response.End()

答案 2 :(得分:0)

您可以尝试在Response.Clear()电话后清除内容和标题:

    Response.ClearContent();
    Response.ClearHeaders();