|
|
1 private void Export(System.Web.UI.WebControls.DataGrid dg,string fileName,string typeName) 2  { 3 4 System.Web.HttpResponse httpResponse = Page.Response; 5 httpResponse.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)); 6 httpResponse.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312"); 7 httpResponse.ContentType = typeName; 8 System.IO.StringWriter tw = new System.IO.StringWriter() ; 9 System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw); 10 dg.RenderControl(hw); 11 string filePath = Server.MapPath("..")+fileName; 12 System.IO.StreamWriter sw = System.IO.File.CreateText(filePath); 13 sw.Write(tw.ToString()); 14 sw.Close(); 15 16 DownFile(httpResponse,fileName,filePath); 17 httpResponse.End(); 18 } 19 20 private bool DownFile(System.Web.HttpResponse Response,string fileName,string fullPath) 21  { 22 try 23  { 24 Response.ContentType = "application/octet-stream"; 25 26 Response.AppendHeader("Content-Disposition","attachment;filename=" + 27 HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + ";charset=GB2312"); 28 System.IO.FileStream fs= System.IO.File.OpenRead(fullPath); 29 long fLen=fs.Length; 30 int size=102400;//每100K同时下载数据 31 byte[] readData = new byte[size];//指定缓冲区的大小 32 if(size>fLen)size=Convert.ToInt32(fLen); 33 long fPos=0; 34 bool isEnd=false; 35 while (!isEnd) 36  { 37 if((fPos+size)>fLen) 38  { 39 size=Convert.ToInt32(fLen-fPos); 40 readData = new byte[size]; 41 isEnd=true; 42 } 43 fs.Read(readData, 0, size);//读入一个压缩块 44 Response.BinaryWrite(readData); 45 fPos+=size; 46 } 47 fs.Close(); 48 System.IO.File.Delete(fullPath); 49 return true; 50 } 51 catch 52  { 53 return false; 54 } 55 } 56 57 58 private void btnWord_Click(object sender, System.EventArgs e) 59  { 60 Export(dataGrid,"FileName.doc","application/ms-word"); 61 62 } 63 64 private void btnExcel_Click(object sender, System.EventArgs e) 65  { 66 Export(dataGrid,"FileName.xls","application/ms-excel"); 67 }
|