protected void Button1_Click(object sender, EventArgs e) {
SQLHelper access = new SQLHelper();
var ds = access.GetDataSet("select top 100 * from table1");
//PageHelper.aaa();
ExportToExcel(ds, "查询结果");
}
/// <summary>
/// 将DataTable数据输出为Excel表格
/// </summary>
/// <param name="DT">DataTable数据</param>
public static void ExportToExcel(System.Data.DataTable DT, string FileName) {
if (null == DT) {
return;
}
Common.Excel.ToExcel toExcel = new Common.Excel.ToExcel();
toExcel.ExcelFileName = DownloadPath;
string exportPath = string.Empty;
DateTime dt = DateTime.Now;
exportPath = toExcel.DataSetToExcel_NPOI(DT);
System.IO.FileInfo fileInfo = new System.IO.FileInfo(exportPath);
var dt2 = DateTime.Now - dt;
FileName = FileName + dt2.TotalSeconds.ToString();
if (string.IsNullOrEmpty(FileName)) {
FileName = fileInfo.Name;
}
if (!FileName.ToLower().EndsWith(".xls")) {
FileName += ".xls";
}
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";// 指定返回的是一个不能被客户端读取的流,必须被下载
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8));
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.Charset = "";
HttpContext.Current.Response.WriteFile(exportPath); // 把文件流发送到客户端
HttpContext.Current.Response.Flush();
//删除文件
fileInfo.Delete();
fileInfo = null;
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.End();
}
经过测试,IE、火狐、傲游浏览器、谷歌浏览器、世界之窗等浏览器试都不会出现调用两次按钮事
目前只发现“搜狗高速浏览器”总是一点下载就会调用两次。
如果出现下载对话框点“取消”,就不会。一旦点“下载”,就会被调用两次。