C# DataTable下载
从服务器下载datatable到本地,有多种处理方式,下面介绍三种。
方式一,将datatable转为txt下载。
步骤:
1.将datatable内容下载到服务器txt中
2.将服务器的txt下载到本地来
3.删除服务器上的txt
方式二,datatable绑定到控件GridView后下载
步骤:
1.关闭控件分页功能并绑定数据到控件
2.下载控件内容到本地
3.打开控件分页功能并重新绑定数据
方式三,datatable转为Excel下载
步骤:
1.将datatable内容下载到服务器Excel中
2.将服务器中的Excel下载到本地
3.删除服务器上的Excel
如果大家有其他好的方式,不妨分享下,最好有源码,哈哈哈~~~~
//datatable转为txt public void DataTableToTxt(string filePath,DataTable ds) { FileStream fs = new FileStream(filePath, FileMode.Create); StreamWriter sw = new StreamWriter(fs); //开始写入 for (int j=0; j < ds.Columns.Count; j++) { sw.Write(ds.Columns[j].ColumnName); sw.Write("\t"); } sw.Write("\r\n"); for (int i = 0; i < ds.Rows.Count; i++) { for (int j = 0; j < ds.Columns.Count; j++) { sw.Write(ds.Rows[i][j].ToString() == " " ? "" : ds.Rows[i][j].ToString()); sw.Write("\t"); } sw.Write("\r\n"); } //清空缓冲区 sw.Flush(); //关闭流 sw.Close(); fs.Close(); }
//下载控件内容 public void GridviewToExcel(Control control, string FileType, string FileName) { HttpContext.Current.Response.Charset = "GB2312";//设置了类型为中文防止乱码的出现 HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");//注意编码 HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).ToString());//将http头添加到输出流 HttpContext.Current.Response.ContentType = FileType;//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword control.Page.EnableViewState = false;//服务器端只做出一次响应 StringWriter tw = new StringWriter();//实现将信息写入字符串(下面的信息会写到这里) HtmlTextWriter hw = new HtmlTextWriter(tw);//用于将标记字符和文本写入到ASP.NET服务器控件输出流 control.RenderControl(hw);//将服务器控件的内容输出到所提供的 HtmlTextWriter 对象中 HttpContext.Current.Response.Write("<html><head><meta http-equiv=Content-Type content=\"text/html; charset=gb2312\">"); HttpContext.Current.Response.Write(tw.ToString()); HttpContext.Current.Response.Write("</body></html>"); HttpContext.Current.Response.End(); } //调用 GridviewToExcel(grd, "application/vnd.ms-excel.numberformat:@", "xx.xls");
//datatable 转excel public void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName) { if (tmpDataTable == null) return; int rowNum = tmpDataTable.Rows.Count; int columnNum = tmpDataTable.Columns.Count; int rowIndex = 1; int columnIndex = 0; Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); xlApp.DefaultFilePath = ""; xlApp.DisplayAlerts = true; xlApp.SheetsInNewWorkbook = 1; Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true); Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.ActiveSheet; //将DataTable的列名导入Excel表第一行 foreach (DataColumn dc in tmpDataTable.Columns) { columnIndex++; xlApp.Cells[rowIndex, columnIndex] = dc.ColumnName; } //将DataTable中的数据导入Excel中 xlSheet.Range[xlSheet.Cells[1, 1], xlSheet.Cells[rowNum + 1, columnNum+1]].NumberFormatLocal = "@";//将格式设置成文本 for (int i = 0; i < rowNum; i++) { rowIndex++; columnIndex = 0; for (int j = 0; j < columnNum; j++) { columnIndex++; xlApp.Cells[rowIndex, columnIndex] = tmpDataTable.Rows[i][j].ToString(); } } //xlBook.SaveCopyAs(HttpUtility.UrlDecode(strFileName, System.Text.Encoding.UTF8)); xlBook.SaveCopyAs(strFileName); } DataTabletoExcel(ds, Server.MapPath("") + "\\xx.xlsx");
//文件下载 参数 文件名 文件路径 public void DownFileToLocal(string FileName,string FilePath) { FileInfo fileInfo = new FileInfo(FilePath); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.ClearHeaders(); HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName); HttpContext.Current.Response.AddHeader("Content-Length", fileInfo.Length.ToString()); HttpContext.Current.Response.AddHeader("Content-Transfer-Encoding", "binary"); HttpContext.Current.Response.ContentType = "application/octet-stream"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); HttpContext.Current.Response.WriteFile(fileInfo.FullName); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.End(); }