2013-05-16 98 views
2

如何将数据集保存为CSV文件到客户端PC?如何将数据表保存为客户端PC上的CSV文件ASP.net

我可以将文件从服务器保存到客户端PC,我可以将数据表转换为CSV文件,但我似乎无法弄清楚如何将两者结合在一起。

从服务器保存文件至客户端(如附件)

String FileName = "my file name"; 
String FilePath = @"C:\testfile.txt"; 
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
response.ClearContent(); 
response.Clear(); 
response.ContentType = "text/plain"; 
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";"); 

response.TransmitFile(FilePath + FileName); //Can only put the file path in here, cant put the datatable or convertion in there.. 
response.Flush(); 
response.End(); 

转换数据表到CSV文件(因为我有一个CSV文件到客户端PC应保存的数据表)

StringBuilder sb = new StringBuilder(); 

string[] columnNames = dt.Columns.Cast<DataColumn>(). 
            Select(column => column.ColumnName). 
            ToArray(); 
sb.AppendLine(string.Join(",", columnNames)); 

foreach (DataRow row in dt.Rows) 
{ 
    string[] fields = row.ItemArray.Select(field => field.ToString()). 
            ToArray(); 
    sb.AppendLine(string.Join(",", fields)); 
} 

File.WriteAllText("test.csv", sb.ToString()); 

回答

4

您可以使用response.Write(sb.ToString());而不是response.TransmitFile来呈现CSV生成的数据。例如:

response.ClearContent(); 
response.Clear(); 
response.ContentType = "text/plain"; 
response.AddHeader("Content-Disposition", "attachment; filename=DownloadedData.txt;"); 

StringBuilder sb = new StringBuilder(); 

string[] columnNames = dt.Columns.Cast<DataColumn>(). 
            Select(column => column.ColumnName). 
            ToArray(); 
sb.AppendLine(string.Join(",", columnNames)); 

foreach (DataRow row in dt.Rows) 
{ 
    string[] fields = row.ItemArray.Select(field => field.ToString()). 
            ToArray(); 
    sb.AppendLine(string.Join(",", fields)); 
} 

// the most easy way as you have type it 
response.Write(sb.ToString()); 


response.Flush(); 
response.End(); 

并且最好使用处理程序,而不是从页面执行该操作。

+1

这工作十分感谢保存文件。不知道你可以做出回应。 – Ruan

0

不写入File对象,写入Response对象。当你会说:“到Response.End();”,它会提示

0

U可以试试这个代码,这将创建一个XLS文件作为附件

Response.AppendHeader("content-disposition", "attachment;filename=FileEName.xls"); 
    Response.Charset = ""; 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.ContentType = "application/vnd.ms-excel"; 
    this.EnableViewState = false; 
    Response.Write("PASS YOUR STRING HERE"); 
    Response.End(); 
相关问题