C# 在UpdatePanel控件里下载文件Excel
参考的例子
asp.net中下载文件的问题 - 九天星辰 - 博客园 (cnblogs.com)
例子是SearchAllInspectList.aspx
1、在aspx页面加上Triggers标签
//一定要加在ContentTemplate和asp:UpdatePanel之间 //btnExport就是一个button按钮,点击btnExport就下载excel </ContentTemplate> <Triggers> <asp:PostBackTrigger ControlID="btnExport" /> </Triggers> </asp:UpdatePanel>
//这是btnExport_Click事件里的代码 ExportToExcel12(dtReInpect); // ExportToExcel(gvSearchResult); ScriptManager scriptManager = (ScriptManager)((Page)HttpContext.Current.Handler).FindControl("ScriptManager1");//获取父页面ScriptManager1控件 scriptManager.RegisterPostBackControl((System.Web.UI.Control)sender); #region//导出模板 //服务器的路径地址文件夹,在根目录对应的文件相关的FileTempletModel下;如本系统的生成的文件在(根目录-MenuWFrm-JCSZ)下的FileTempletModel里 string savePath = HttpContext.Current.Server.MapPath("Excel"); if (!System.IO.Directory.Exists(savePath)) {//如果没有文件夹,则建立 System.IO.Directory.CreateDirectory(savePath); } savePath = savePath + "\\IPQCSearchList.xls";//服务器上的文件名称:文件夹路径 + 模板名称 + 后缀名(.xml) dtReInpect.WriteXml(savePath); // dsReInpect.WriteXml(savePath);//数据导出到文件中(服务器上) GC.Collect(); string filePath = savePath;//+ ".xml";//服务器上的文件名称,用于从服务器下载到客户端上 if (System.IO.File.Exists(filePath)) {//将服务器上的文件下载到客户端上 System.IO.FileInfo file = new System.IO.FileInfo(filePath); Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8"); //解决中文乱码 Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name)); //解决中文文件名乱码 Response.AddHeader("Content-length", file.Length.ToString());//下载时显示进度条 Response.ContentType = "appliction/octet-stream"; //Response.ContentType = "application/x-zip-compressed"; //Response.WriteFile(file.FullName); /* 微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite 下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。 代码如下: */ Response.TransmitFile(filePath, 0, file.Length); //这个路径是在根目录下 Response.Flush(); // Response.End(); HttpContext.Current.ApplicationInstance.CompleteRequest();
ExportToExcel12方法
private void ExportToExcel12(DataTable dt) { string fileName = "IPQCSearchList"; IWorkbook workbook = null; //保存的数据 FileStream fs = null; IRow row = null; ISheet sheet = null; //生成表格 ICell cell = null; if (dt != null && dt.Rows.Count > 0) { workbook = new HSSFWorkbook(); sheet = workbook.CreateSheet("Sheet0");//创建一个名称为Sheet0的表 int rowCount = dt.Rows.Count;//行数 int columnCount = dt.Columns.Count;//列数 //设置列头 row = sheet.CreateRow(0);//excel第一行设为列头,在第一行中写入数据(所有列的第一行) for (int c = 0; c < columnCount; c++) { cell = row.CreateCell(c, CellType.Numeric); //创建一个单元格,保留文本格式 cell.SetCellValue(dt.Columns[c].ColumnName); //将数据写入到单元格中 } //设置每行每列的单元格, for (int i = 0; i < rowCount; i++) //写完所有的行和列 { row = sheet.CreateRow(i + 1); //这里是新开启一行,从第二行开始写,第一行上面已经写完 for (int j = 0; j < columnCount; j++) { cell = row.CreateCell(j);//excel第二行开始写入数据,一列一列的分别创建单元格 cell.SetCellValue(dt.Rows[i][j].ToString()); //创建列的单元格的内容 } } string TempletFileName = Server.MapPath("Excel/").Replace("\\Form", "") + "IPQCSearchList" + ".xls"; using (fs = File.OpenWrite(TempletFileName)) { workbook.Write(fs);//向打开的这个xls文件中写入数据 } } }