protected void Export_OnClick(object sender, EventArgs e)
{
DownloadFile(Response, dt, "TrainStat_Event.csv");
Response.End();
}
public static void DownloadFile(HttpResponse argResp, DataTable dt, string strFileName)
{
try
{
StringBuilder argFileStream = new StringBuilder();
string strResHeader = "attachment; filename=" + Guid.NewGuid().ToString() + ".csv";
ExportCSV(dt, ref argFileStream);
if (!string.IsNullOrEmpty(strFileName))
{
strResHeader = "inline; filename=" + strFileName;
}
argResp.AppendHeader("Content-Disposition", strResHeader);//attachment说明以附件下载,inline说明在线打开
argResp.ContentType = "application/ms-excel";
argResp.ContentEncoding = Encoding.GetEncoding("GB2312"); // Encoding.UTF8;//
argResp.Write(argFileStream);
}
catch (Exception ex)
{
throw ex;
}
}
public static void ExportCSV(DataTable dt, ref StringBuilder sb)
{
IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dt.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
sb.AppendLine(string.Join(",", fields));
}
}
代码部分最重要的两块就是把datatable转换为stringbuilder,还有一个是response提示将stringbuilder导出成CSV文件。