asp.net教程:GridView导出到Excel或Word文件</ br>

在项目中我们经常会遇到要求将一些数据导出成Excel或者Word表格的情况,比如中国移动(我是中国移动用户)网上查话费的页面中就有一个导出到Excel的功能,光大网上银行查看历史明细也有这些功能....,原本以为这个问题不难的,不过看到网上经常有朋友问,于是我整理了一下,供大家参考。

  前台页面:

<%@PageLanguage="C#"CodeFile="ExportDemo.aspx.cs"Inherits="ExportDemo"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
  <title>GridView导出到Excel或Word文件——周公的博客:http://blog.csdn.net</title>
</head>
<body>
  <formid="form1"runat="server">
  <div>
    <asp:GridViewID="gvPersonList"runat="server">
      <Columns>
        <asp:BoundFieldDataField="Id"HeaderText="编号"/>
        <asp:BoundFieldDataField="Name"HeaderText="姓名"/>
        <asp:TemplateFieldHeaderText="性别">
          <ItemTemplate>
            <%#eval_r("Sex").ToString()=="true"?"男":"女"%>
          </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundFieldDataField="Age"HeaderText="年龄"/>
        <asp:TemplateFieldHeaderText="婚否">
          <ItemTemplate>
            <%#Boolean.Parse(eval_r("Married").ToString())==true?"是":"否"%>
          </ItemTemplate>
        </asp:TemplateField>
      </Columns>
    </asp:GridView>
    <asp:ButtonID="btnToExcel"runat="server"OnClick="btnToExcel_Click"Text="导出到Excel"/>
    <asp:ButtonID="btnToWord"runat="server"OnClick="btnToWord_Click"Text="导出到Word"/>
  </div>
  </form>
</body>
</html>
后台代码:

usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
///<summary>
///程序说明:这是一个GridView导出成Excel或者Word文件的实例。为了演示,我采用了自动生成DataTable,然后绑定。
///同时为了初学者查看代码方便,关键处我都做了注释。
///对程序说明,在asp.net1.1中由于对控件呈现不是很严格,所以无需overridevoidVerifyRenderingInServerForm(Controlcontrol)这个方法
///但在asp.net2.0中,控件的校验严格了,RenderControl代码只有走正常流程在render方法中它自己调用才能成功,
///在你自己写的事件方法中调用就会出现这个错误。这个错误信息有点误导,你明明写在服务器控件Form内,它照样会这样提醒你,
///实际上是asp.net2.0设置了内部变量控制RenderControl不允许在Render方法之外被轻易调用。如果不overrideVerifyRenderingInServerForm
///就会报错。我们overridevoidVerifyRenderingInServerForm(Controlcontrol)这个方法,里面不写任何代码即可
///作者:周公
///日期:2008-5-16
///网址:http://blog.csdn.net/zhoufoxcn
///</summary>
publicpartialclassExportDemo:System.Web.UI.Page
{
  privatestringfirstName="赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华";
  privatestringlastName="猛勇刚强豹彪雁燕蓉菲";
  protectedvoidPage_Load(objectsender,EventArgse)
  {
    if(!Page.IsPostBack)
    {
      BindGridView();
    }
  }
  privatevoidBindGridView()
  {
    DataTablemyData=CreateDataTable();
    Session["MyData"]=myData;
    gvPersonList.DataSource=myData;
    gvPersonList.DataBind();
  }
  //手动生成DataTable
  privateDataTableCreateDataTable()
  {
    DataTabledata=newDataTable();
    DataColumndcId=newDataColumn("ID",typeof(Int32));
    //设置ID列自动递增
    dcId.AutoIncrement=true;
    //设置ID列初始值为1
    dcId.AutoIncrementSeed=1;
    //设置ID列递增步长为1
    dcId.AutoIncrementStep=1;
    //将ID列添加到DataTable中
    data.Columns.Add(dcId);
    data.Columns.Add(newDataColumn("Name",typeof(string)));
    data.Columns.Add(newDataColumn("Age",typeof(int)));
    data.Columns.Add(newDataColumn("Sex",typeof(bool)));
    data.Columns.Add(newDataColumn("Married",typeof(bool)));
    DataRowdataRow=null;
    Randomrandom=newRandom();
    //随机生成20条记录
    for(inti=0;i<20;i++)
    {
      dataRow=data.NewRow();
      //随机生成姓名
      dataRow["Name"]=firstName.Substring(random.Next(firstName.Length),1)+lastName.Substring(random.Next(lastName.Length),1);
      //随即生成介于20至100之间的年龄
      intage=random.Next(20,100);
      dataRow["Age"]=age;
      //随即设置性别
      boolsex=(random.Next(100)%2==0)?true:false;
      dataRow["Sex"]=sex;
      if(((sex==true)&&(age>=22))||((sex==false)&&(age>=20)))//男性结婚年龄大于22周岁,女性结婚年龄大于20周岁
      {
        dataRow["Married"]=(random.Next(500)%2==0)?true:false;
      }
      else
      {
        dataRow["Married"]=false;
      }
      data.Rows.Add(dataRow);
    }
    returndata;
  }
  //override掉这个方法
  publicoverridevoidVerifyRenderingInServerForm(Controlcontrol)
  {
    //注释掉下面的代码,否则在asp.net2.0下会报错(注:GridView是asp.net2.0下的控件,1.1下一些控件也可以导出成Excel或者Word)
    //base.VerifyRenderingInServerForm(control);
  }
  protectedvoidbtnToExcel_Click(objectsender,EventArgse)
  {
    Response.Clear();
    Response.BufferOutput=true;
    //设定输出的字符集
    Response.Charset="GB2312";
    //假定导出的文件名为FileName.xls
    Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
    Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
    //设置导出文件的格式
    Response.ContentType="application/ms-excel";
    //关闭ViewState
    EnableViewState=false;
    System.Globalization.CultureInfocultureInfo=newSystem.Globalization.CultureInfo("ZH-CN",true);
    System.IO.StringWriterstringWriter=newSystem.IO.StringWriter(cultureInfo);
    System.Web.UI.HtmlTextWritertextWriter=newSystem.Web.UI.HtmlTextWriter(stringWriter);
    gvPersonList.RenderControl(textWriter);
    //把HTML写回浏览器
    Response.Write(stringWriter.ToString());
    Response.End();
  }
  //导出成Word文件
  protectedvoidbtnToWord_Click(objectsender,EventArgse)
  {
    Response.Clear();
    Response.BufferOutput=true;
    //设定输出的字符集
    Response.Charset="GB2312";
    //假定导出的文件名为FileName.doc
    Response.AppendHeader("Content-Disposition","attachment;filename=FileName.doc");
    Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
    ////设置导出文件的格式
    Response.ContentType="application/ms-word";
    //关闭ViewState
    gvPersonList.EnableViewState=false;
    System.Globalization.CultureInfocultureInfo=newSystem.Globalization.CultureInfo("ZH-CN",true);
    System.IO.StringWriterstringWriter=newSystem.IO.StringWriter(cultureInfo);
    System.Web.UI.HtmlTextWritertextWriter=newSystem.Web.UI.HtmlTextWriter(stringWriter);
    gvPersonList.RenderControl(textWriter);
    ////把HTML写回浏览器
    Response.Write(stringWriter.ToString());
    Response.End();
  }
}

运行效果:

  需要说明的是:在asp.net2.0环境下,VerifyRenderingInServerForm(Control control)这个方法不override的话,则会出现“错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内”这个错误

</ br>

asp.net教程:GridView导出到Excel或Word文件的更多相关文章

  1. DevExpress GridControl GridView 导出到 Excel 类

    说明: 1>GridView 导出到 Excel (如果分页,只导出当前页数据) 2>GridView 导出到 Excel 3>方法2可以参考DataTable 导出到 Excel ...

  2. GridView导出成Excel字符"0"丢失/数字丢失的处理方式 收藏

    GridView导出成Excel字符"0"丢失/数字丢失的处理方式 收藏 GridView 导出成Excel文件,这个代码在网上比较多.但是发现存在一个问题,导出的数据中如果有&q ...

  3. asp.net将数据导出到excel

    本次应用datatable导出,若用gridview(假设gridview设为了分页显示)会出现只导出当前页的情况. protected void btnPrn_Click(object sender ...

  4. Gridview导出到Excel

    #region #导出到Excel     protected void Button2_Click(object sender, EventArgs e)     {         Respons ...

  5. asp.net Mvc Npoi 导出导入 excel

    因近期项目遇到所以记录一下: 首先导出Excel : 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// < ...

  6. 将html导出到excel或word

    本质是将html写成word或excel支持的html格式. 如何将html写成word或excel支持的格式? 只需打开计算机上任意一个word或excel文档,打开文件->另存为,选择文件类 ...

  7. java生成excel,word文件

    第一部分: 在网站开发中,用户可能需要打印word或者excel表,这种需求是非常多的. java语言生成excel表格和python的方式有点像,使用Apache POI的组件,一通全通.开发过程通 ...

  8. asp.net将内容导出到Excel,Table表格数据(html)导出EXCEL

    代码: /// <summary> /// HTML Table表格数据(html)导出EXCEL /// </summary> /// <param name=&quo ...

  9. asp.net 把数据导出为excel

    本篇介绍c#中如何使用DataTable导出Excel,至于其他的导出方法,这里不作介绍! 1.首页从数据库读取数据,得到DataTable: DataTable dt = HelperExecute ...

随机推荐

  1. Frame动画实战

    Android动画分为Tween动画和Frame动画,Tween动画主要包括图片的放大缩小.旋转.透明度变化.移动等等操作:Frame动画则简单得多了,就是把一张张的图片连续播放产生动画效果. 本节主 ...

  2. Spring的依赖注入怎么理解

    先看一段代码假设你编写了两个类,一个是人(Person),一个是手机(Mobile). 人有时候需要用手机打电话,需要用到手机的dialUp方法. 传统的写法是这样: Java code public ...

  3. HTTP消息结构

    HTTP 消息结构 HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议. 一个HTTP"客户端"是一个应用程序(Web浏览 ...

  4. SpringMvc+Spring+Mybatis的jar包依赖关系图

  5. Eclipse的FindBugs插件

      Eclipse的FindBugs插件     问题提出: 当我们编写完代码,做完单元测试等各种测试后就提交正式运行,只能由运行的系统来检测我们代码是否有问题了,代码中隐藏的错误在系统运行的过程中被 ...

  6. (转)笔记320 SQLSERVER中的加密函数 2013-7-11

    1 --SQLSERVER中的加密函数 2013-7-11 2 ENCRYPTBYASYMKEY() --非对称密钥 3 ENCRYPTBYCERT() --证书加密 4 ENCRYPTBYKEY() ...

  7. RPM方式安装MySQL5.6

    原文转自:http://blog.csdn.net/liumm0000/article/details/18841197 未整理! RPM方式安装MySQL5.6 a. 检查MySQL及相关RPM包, ...

  8. JS手札

    Node JS 关于JS调用 被调用:exports.cv=cv; cv为类,可以使用其方法cv.***: cv为函数名,可以使用其函数cv( , ): 调用: var cv=require(cv); ...

  9. 当我们说线程安全时,到底在说什么——Java进阶系列(二)

    原创文章,同步发自作者个人博客,转载请以超链接形式在文章开头处注明出处http://www.jasongj.com/java/thread_safe/ 多线程编程中的三个核心概念 原子性 这一点,跟数 ...

  10. FTP应答码&响应码

    2016-06-16 00:57:25 110: 重新启动标记应答. 120: 在n分钟内准备好 125: 连接打开准备传送 150: 打开数据连接200: 命令成功202: 命令失败211: 系统状 ...