zoukankan      html  css  js  c++  java
  • 使用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>
  • 相关阅读:
    [hdu4436 str2int]后缀自动机SAM(或后缀数组SA)
    bytedance专题
    LSTM+CRF维特比解码过程
    spark core类梳理
    spark源码阅读---Utils.getCallSite
    python2.7官方文档阅读笔记
    cs224d---词向量表示
    cs231n---强化学习
    cs231n---生成模型
    Spring 2017 Assignments3
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/1606431.html
Copyright © 2011-2022 走看看