使用Response导出GridView,下载文件

Response是Asp.net的服务器响应对象,其中可以指定输出的内容,可以用它来导出网页或控件(如GridView)等,也可以用来下载文件(用Response下载的好处是文件在网站中的目录结构不会被暴露)

下面就简要介绍下怎么用Response来将GridView导出成Excel和Word,另外下载mp3

首先是网页后台

Default.aspx.cs

 

代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.IO;
using  System.Text;

public   partial   class  _Default : System.Web.UI.Page 
{
    
protected   void  Page_Load( object  sender, EventArgs e)
    {

    }


    
protected   void  ExportExcel()
    {
        Response.Clear();
        Response.ContentType 
=   " application/ms-excel " ;
        Guid guid
= Guid.NewGuid();
        Response.ContentEncoding 
=  Encoding.UTF7; // 如果输出的文本有中文必须要用UTF-7,很奇怪用UTF-8都是乱码.
        Response.AppendHeader( " Content-Disposition " " attachment;filename= "   +  HttpUtility.UrlEncode(guid.ToString()  +   " .xls " , Encoding.UTF8) /* 这里要用UTF-8编码否则文件名是中文就会出现乱码 */ );
        
// StringWriter sw = new StringWriter();
        HtmlTextWriter hw  =   new  HtmlTextWriter(Response.Output);
        GridView1.RenderControl(hw); 
        
// Response.Write(sw.ToString());
        Response.Flush();
        Response.End();
// 一定要在这里结束响应输出流,否则导出的东西里不光有GridView,有网页的所有html元素
    }


    
protected   void  ExportFile()
    {
        Response.Clear();
        Response.ContentType 
=   " application/mp3 " ;
        Response.AppendHeader(
" Content-Disposition " " attachment;filename= "   +  HttpUtility.UrlEncode( " 歌曲 "   +   " 123.mp3 " , Encoding.UTF8));
        FileStream fs 
=   new  FileStream(Server.MapPath( " ~/File/歌曲.mp3 " ), FileMode.Open);
        Response.AppendHeader(
" Content-Length " ,fs.Length.ToString()); // 将文件大小写入Http头,下载文件的时候才会显示进度条
         byte [] fb  =   new   byte [fs.Length];
        fs.Read(fb, 
0 , ( int )fs.Length); 
        fs.Close();
        Response.OutputStream.Write(fb, 
0 , fb.Length); // 输出文件的时候就用Response的输出流
        Response.Flush();
        Response.End();
    }

    
protected   void  ExportWord()
    {
        Response.Clear();
        Response.ContentType 
=   " application/ms-rtf " ;
        Guid guid 
=  Guid.NewGuid();
        Response.BufferOutput 
=   true
        Response.AppendHeader(
" Content-Disposition " " attachment;filename= "   +  HttpUtility.UrlEncode(guid.ToString()  +   " .rtf " , Encoding.UTF8));
        Response.ContentEncoding 
=  Encoding.UTF7;
        HtmlTextWriter hw 
=   new  HtmlTextWriter(Response.Output);
        GridView1.RenderControl(hw);
        Response.Flush();
        Response.End();
    }

    
public   override   void  VerifyRenderingInServerForm(Control control) // 这个函数必须重写否则在GridView1.RenderControl(hw);的时候会被告知GridView没有放在具有runat="server"的容器里,说白了就是最外层的form没有被输出到输出流
    {
        
    }

    
protected   void  Button1_Click( object  sender, EventArgs e)
    {
        ExportExcel();
    }

    
protected   void  Button2_Click( object  sender, EventArgs e)
    {
        ExportFile();
    }
    
protected   void  Button3_Click( object  sender, EventArgs e)
    {
        ExportWord();
    }
}

 

前台Default.aspx:

<% @ Page Language = " C# "  AutoEventWireup = " true "   CodeFile = " Default.aspx.cs "  Inherits = " _Default "   %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
    
< title ></ title >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< div  style ="font-size:10pt;" >
        
< asp:GridView  ID ="GridView1"  runat ="server"  AutoGenerateColumns ="False"  
            BackColor
="White"  BorderColor ="#E7E7FF"  BorderStyle ="None"  BorderWidth ="1px"  
            CellPadding
="3"  DataKeyNames ="id"  DataSourceID ="SqlDataSource1"  
            GridLines
="Horizontal"  Width ="769px" >
            
< RowStyle  BackColor ="#E7E7FF"  ForeColor ="#4A3C8C"   />
            
< Columns >
                
< asp:BoundField  DataField ="id"  HeaderText ="编号"  InsertVisible ="False"  
                    ReadOnly
="True"  SortExpression ="id"   >
                
< ItemStyle  HorizontalAlign ="Center"  VerticalAlign ="Middle"   />
                
</ asp:BoundField >
                
< asp:BoundField  DataField ="name"  HeaderText ="姓名"  SortExpression ="name"   >
                 
< ItemStyle  HorizontalAlign ="Center"  VerticalAlign ="Middle"   />
                
</ asp:BoundField >
                
< asp:BoundField  DataField ="age"  HeaderText ="年龄"  SortExpression ="age"   >
                 
< ItemStyle  HorizontalAlign ="Center"  VerticalAlign ="Middle"   />
                
</ asp:BoundField >
            
</ Columns >
            
< FooterStyle  BackColor ="#B5C7DE"  ForeColor ="#4A3C8C"   />
            
< PagerStyle  BackColor ="#E7E7FF"  ForeColor ="#4A3C8C"  HorizontalAlign ="Right"   />
            
< SelectedRowStyle  BackColor ="#738A9C"  Font-Bold ="True"  ForeColor ="#F7F7F7"   />
            
< HeaderStyle  BackColor ="#4A3C8C"  Font-Bold ="True"  ForeColor ="#F7F7F7"   />
            
< AlternatingRowStyle  BackColor ="#F7F7F7"   />
        
</ asp:GridView >
        
< asp:SqlDataSource  ID ="SqlDataSource1"  runat ="server"  
            ConnectionString
="<%$ ConnectionStrings:TestDBConnectionString %>"  
            SelectCommand
="SELECT t_Student.* FROM t_Student" ></ asp:SqlDataSource >
    
</ div >
    
< div >
        
< asp:Button  ID ="Button1"  runat ="server"  Text ="导出成Excel"  
            onclick
="Button1_Click"   />
        
< asp:Button  ID ="Button3"  runat ="server"  onclick ="Button3_Click"  
            Text
="导出成word"   />
        
< asp:Button  ID ="Button2"  runat ="server"  onclick ="Button2_Click"  Text ="下载歌曲"   />
    
</ div >
    
</ form >
</ body >
</ html >

 

转载于:https://www.cnblogs.com/OpenCoder/archive/2009/11/19/1606431.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值