zoukankan      html  css  js  c++  java
  • Asp.net输出Excel文件并且下载该文件以及某些细节问题解决

    使用asp.net输出Excel文件并且下载,网上资源很多
    我也是参照网上资源写的

    简单流程,就是页面上方一个datagrid控件或者gridview控件,后来绑定数据到控件上,然后输出控件呈现的html代码,输出的http流设置好相应的头文件就可以

    你可以不在页面上方数据控件,直接在后台生成datagrid控件,然后绑定数据并输出,也是可以,只不过Excel的列就是数据库的列,一般会是英文的,显示不太友好。一般哈还是在页面放一个datagrid控件,设置好头名称之类的

    这是前台html代码
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="down.aspx.cs" Inherits="card_manage.Mall.down" %>

    <!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>
       
         <asp:DataGrid ID="DGCardUList" runat="server" Width="98%" AutoGenerateColumns="False" HorizontalAlign="Center" BorderColor="Gray" BorderStyle="Solid" BorderWidth="1px" CssClass="font06">
                            <Columns>
                                <asp:TemplateColumn HeaderText="楼盘编号">
                                    <HeaderStyle HorizontalAlign="Center" BorderColor="Gray" BorderStyle="Solid" BorderWidth="1px"></HeaderStyle>
                                    <ItemStyle HorizontalAlign="Center" Height="25px" Width="60px" BorderColor="Gray"></ItemStyle>
                                    <ItemTemplate>
                                       <%#Eval("NewCode")%>
                                    </ItemTemplate>
                                    <FooterStyle BorderStyle="Solid" BorderWidth="1px" />
                                </asp:TemplateColumn>        
                                 <asp:TemplateColumn HeaderText="城市">
                                    <HeaderStyle HorizontalAlign="Center" BorderColor="Gray" BorderStyle="Solid" BorderWidth="1px"></HeaderStyle>
                                    <ItemStyle HorizontalAlign="Center" Height="25px" Width="60px" BorderColor="Gray"></ItemStyle>
                                    <ItemTemplate>
                                       <%#Eval("City")%>
                                    </ItemTemplate>
                                    <FooterStyle BorderStyle="Solid" BorderWidth="1px" />
                                </asp:TemplateColumn>
                                 <asp:TemplateColumn HeaderText="会员类型">
                                    <HeaderStyle HorizontalAlign="Center" BorderColor="Gray" BorderStyle="Solid" BorderWidth="1px"></HeaderStyle>
                                    <ItemStyle HorizontalAlign="Center" Height="25px" Width="60px" BorderColor="Gray"></ItemStyle>
                                    <ItemTemplate>
                                       <%#Eval("UserType")%>
                                    </ItemTemplate>
                                    <FooterStyle BorderStyle="Solid" BorderWidth="1px" />
                                </asp:TemplateColumn>



                            </Columns>
                            <HeaderStyle BorderColor="Gray" BorderStyle="Solid" BorderWidth="1px" Height="25px"  />
                            <ItemStyle BorderColor="Gray" BorderStyle="Solid" BorderWidth="1px" HorizontalAlign="Center" />
                            <AlternatingItemStyle BorderColor="Gray" BorderStyle="Solid" BorderWidth="1px" />
                            <FooterStyle BorderColor="Gray" BorderStyle="Solid" BorderWidth="1px" />
                        </asp:DataGrid>
        </div>
        </form>
    </body>
    </html>

    后台一个是绑定数据方法,一个输出Excel流的方法
     public void Downtt()
            {
               
               string newcode = "1010000000";
                string where = " 1 = 1";
                string id = newcode.ToString().Substring(newcode.ToString().Length - 1);
                string table = "ProjSubscriptionUser_" + id;

                DataSet ds = ps.GetAllUserNoPager(table, where);
                this.DGCardUList.DataSource = ds;
                this.DGCardUList.DataBind();
                ResponseExcel();
            }
       /// <summary>
            /// 输出Excel
            /// </summary>
            /// <param name="dataSource">数据源</param>
            private void ResponseExcel()
            {
                try
                {
                    Response.Clear();
                    Response.Buffer = true;
                    Response.Charset = "GB2312";
                    Response.AppendHeader("Content-Disposition", "attachment;filename=list.xls");
                    Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
                    Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
                    this.EnableViewState = false;
                    System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
                    System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
                    System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
                    this.DGCardUList.RenderControl(oHtmlTextWriter);
                    Response.Write(oStringWriter.ToString());
                    Response.Flush();
                    Response.End();

                }
                catch (Exception ee)
                {
                }

            }

    就可以就ok。里面的 细节字段写的比较清楚,网上也很多讲解的
    我这里要说的我遇到的几个问题
    我遇到的问题就是最后输出下载的文件时候,ie弹出对话框,说ie无法下载文件
    我认为主要是下面两个问题:
    1.前台datagrid的控件模板,最好不要使用<asp:BoundColumn>,最好还是按照我的博客html来输出,也不会有乱码
    2.这个下载页面一定不要放到名字 比较长的文件夹下, 我刚开始这个页面在一个文件夹名字十几个长度的下面,后来放到一个4个 字母的文件夹下就可以了,不会弹出报错

    比较奇怪


    本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 相关阅读:
    java日期格式转换工具类
    关于IOS给我的启发
    (转载)小米手机给我的启发和思考
    ElasticDownload
    ShopMall
    CycleViewPager
    MaterialImageView
    ZrcListView
    superCleanMaster
    QuickNewsLibs
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319361.html
Copyright © 2011-2022 走看看