将GridView内容导出到Excel或Word中_.Net教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:一个比较好看的网页翻页效果
显示效果:12345,点击了4后又显示,45678并转到第4页,如果总共有10页, 显示到678910就不再显示了。 .aspx trtdalign=centerdivclass=tbl 【当前页:asp:LabelID=lblcurpgrunat=server/asp:Label|总记录数:asp:LabelID=lblRecordrunat=server

前台页面:
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ExportDemo.aspx.cs" Inherits="ExportDemo" %> 
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml" > 
  6.  
  7. <head runat="server"> 
  8.  
  9.      <title>GridView导出到Excel或Word文件——周公的博客:http://blog.csdn.net</title> 
  10.  
  11. </head> 
  12.  
  13. <body> 
  14.  
  15.      <form id="form1" runat="server"> 
  16.  
  17.      <div> 
  18.  
  19.          <asp:GridView ID="gvPersonList" runat="server" AutoGenerateColumns="False"> 
  20.  
  21.              <Columns> 
  22.  
  23.                  <asp:BoundField DataField="Id" HeaderText="编号" /> 
  24.  
  25.                  <asp:BoundField DataField="Name" HeaderText="姓名" /> 
  26.  
  27.                  <asp:TemplateField HeaderText="性别"> 
  28.  
  29.                      <ItemTemplate> 
  30.  
  31.                          <%# Eval("Sex").ToString()=="true"?"男":"女" %> 
  32.  
  33.                      </ItemTemplate> 
  34.  
  35.                  </asp:TemplateField> 
  36.  
  37.                  <asp:BoundField DataField="Age" HeaderText="年龄" /> 
  38.  
  39.                  <asp:TemplateField HeaderText="婚否"> 
  40.  
  41.                      <ItemTemplate> 
  42.  
  43.                          <%# Boolean.Parse(Eval("Married").ToString())==true?"是":"否" %> 
  44.  
  45.                      </ItemTemplate> 
  46.  
  47.                  </asp:TemplateField> 
  48.  
  49.              </Columns> 
  50.  
  51.          </asp:GridView> 
  52.  
  53.          <asp:Button ID="btnToExcel" runat="server" OnClick="btnToExcel_Click" Text="导出到Excel" /> 
  54.  
  55.          <asp:Button ID="btnToWord" runat="server" OnClick="btnToWord_Click" Text="导出到Word" /> 
  56.  
  57.      </div> 
  58.  
  59.      </form> 
  60.  
  61. </body> 
  62.  
  63. </html> 
后台代码:
  1. using System; 
  2.  
  3. using System.Data; 
  4.  
  5. using System.Configuration; 
  6.  
  7. using System.Collections; 
  8.  
  9. using System.Web; 
  10.  
  11. using System.Web.Security; 
  12.  
  13. using System.Web.UI; 
  14.  
  15. using System.Web.UI.WebControls; 
  16.  
  17. using System.Web.UI.WebControls.WebParts; 
  18.  
  19. using System.Web.UI.HtmlControls; 
  20.  
  21. /// <summary> 
  22.  
  23. /// 程序说明:这是一个GridView导出成Excel或者Word文件的实例。为了演示,我采用了自动生成DataTable,然后绑定。 
  24.  
  25. /// 同时为了初学者查看代码方便,关键处我都做了注释。 
  26.  
  27. /// 对程序说明,在asp.net 1.1中由于对控件呈现不是很严格,所以无需override void VerifyRenderingInServerForm(Control control)这个方法 
  28.  
  29. /// 但在asp.net2.0中,控件的校验严格了,RenderControl代码只有走正常流程在render方法中它自己调用才能成功, 
  30.  
  31. /// 在你自己写的事件方法中调用就会出现这个错误。这个错误信息有点误导,你明明写在服务器控件Form内,它照样会这样提醒你, 
  32.  
  33. /// 实际上是asp.net2.0设置了内部变量控制RenderControl不允许在Render方法之外被轻易调用。如果不override VerifyRenderingInServerForm 
  34.  
  35. /// 就会报错。我们override void VerifyRenderingInServerForm(Control control)这个方法,里面不写任何代码即可 
  36.  
  37. /// 作者:周公 
  38.  
  39. /// 日期:2008-5-16 
  40.  
  41. /// 网址:http://blog.csdn.net/zhoufoxcn 
  42.  
  43. /// </summary> 
  44.  
  45. public partial class ExportDemo : System.Web.UI.Page 
  46.  
  47. { 
  48.  
  49.      private string firstName = "赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华"; 
  50.  
  51.      private string lastName = "猛勇刚强豹彪雁燕蓉菲"; 
  52.  
  53.      protected void Page_Load(object sender, EventArgs e) 
  54.  
  55.      { 
  56.  
  57.          if (!Page.IsPostBack) 
  58.  
  59.          { 
  60.  
  61.              BindGridView(); 
  62.  
  63.          } 
  64.  
  65.      } 
  66.  
  67.      private void BindGridView() 
  68.  
  69.      { 
  70.  
  71.          DataTable myData = CreateDataTable(); 
  72.  
  73.          Session["MyData"] = myData; 
  74.  
  75.          gvPersonList.DataSource = myData; 
  76.  
  77.          gvPersonList.DataBind(); 
  78.  
  79.      } 
  80.  
  81.      //手动生成DataTable 
  82.  
  83.      private DataTable CreateDataTable() 
  84.  
  85.      { 
  86.  
  87.          DataTable data = new DataTable(); 
  88.  
  89.          DataColumn dcId = new DataColumn("ID", typeof(Int32)); 
  90.  
  91.          //设置ID列自动递增 
  92.  
  93.          dcId.AutoIncrement = true; 
  94.  
  95.          //设置ID列初始值为1 
  96.  
  97.          dcId.AutoIncrementSeed = 1; 
  98.  
  99.          //设置ID列递增步长为1 
  100.  
  101.          dcId.AutoIncrementStep = 1; 
  102.  
  103.          //将ID列添加到DataTable中 
  104.  
  105.          data.Columns.Add(dcId); 
  106.  
  107.          data.Columns.Add(new DataColumn("Name", typeof(string))); 
  108.  
  109.          data.Columns.Add(new DataColumn("Age", typeof(int))); 
  110.  
  111.          data.Columns.Add(new DataColumn("Sex", typeof(bool))); 
  112.  
  113.          data.Columns.Add(new DataColumn("Married", typeof(bool))); 
  114.  
  115.          DataRow dataRow = null; 
  116.  
  117.          Random random = new Random(); 
  118.  
  119.          //随机生成20条记录 
  120.  
  121.          for (int i = 0; i < 20; i++) 
  122.  
  123.          { 
  124.  
  125.              datadataRow = data.NewRow(); 
  126.  
  127.              //随机生成姓名 
  128.  
  129.              dataRow["Name"] = firstName.Substring(random.Next(firstName.Length), 1) + lastName.Substring(random.Next(lastName.Length), 1); 
  130.  
  131.              //随即生成介于20至100之间的年龄 
  132.  
  133.              int age = random.Next(20, 100); 
  134.  
  135.              dataRow["Age"] = age; 
  136.  
  137.              //随即设置性别 
  138.  
  139.              bool sex = (random.Next(100) % 2 == 0) ? true : false; 
  140.  
  141.              dataRow["Sex"] = sex; 
  142.  
  143.              if (((sex == true) && (age >= 22)) || ((sex == false) && (age >= 20)))//男性结婚年龄大于22周岁,女性结婚年龄大于20周岁 
  144.  
  145.              { 
  146.  
  147.                  dataRow["Married"] = (random.Next(500) % 2 == 0) ? true : false; 
  148.  
  149.              } 
  150.  
  151.              else 
  152.  
  153.              { 
  154.  
  155.                  dataRow["Married"] = false; 
  156.  
  157.              } 
  158.  
  159.              data.Rows.Add(dataRow); 
  160.  
  161.          } 
  162.  
  163.          return data; 
  164.  
  165.      } 
  166.  
  167.      //override掉这个方法 
  168.  
  169.      public override void VerifyRenderingInServerForm(Control control) 
  170.  
  171.      { 
  172.  
  173.          //注释掉下面的代码,否则在asp.net2.0下会报错(注:GridView是asp.net 2.0下的控件,1.1下一些控件也可以导出成Excel或者Word) 
  174.  
  175.          //base.VerifyRenderingInServerForm(control); 
  176.  
  177.      } 
  178.  
  179.      protected void btnToExcel_Click(object sender, EventArgs e) 
  180.  
  181.      { 
  182.  
  183.          Response.Clear(); 
  184.  
  185.          Response.BufferOutput = true; 
  186.  
  187.          //设定输出的字符集 
  188.  
  189.          Response.Charset = "GB2312"; 
  190.  
  191.          //假定导出的文件名为FileName.xls 
  192.  
  193.          Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls"); 
  194.  
  195.          Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); 
  196.  
  197.          //设置导出文件的格式 
  198.  
  199.          Response.ContentType = "application/ms-excel"; 
  200.  
  201.          //关闭ViewState 
  202.  
  203.          EnableViewState = false; 
  204.  
  205.          System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ZH-CN", true); 
  206.  
  207.          System.IO.StringWriter stringWriter = new System.IO.StringWriter(cultureInfo); 
  208.  
  209.          System.Web.UI.HtmlTextWriter textWriter = new System.Web.UI.HtmlTextWriter(stringWriter); 
  210.  
  211.          gvPersonList.RenderControl(textWriter); 
  212.  
  213.          //把HTML写回浏览器 
  214.  
  215.          Response.Write(stringWriter.ToString()); 
  216.  
  217.          Response.End(); 
  218.  
  219.      } 
  220.  
  221.      //导出成Word文件 
  222.  
  223.      protected void btnToWord_Click(object sender, EventArgs e) 
  224.  
  225.      { 
  226.  
  227.          Response.Clear(); 
  228.  
  229.          Response.BufferOutput = true; 
  230.  
  231.          //设定输出的字符集 
  232.  
  233.          Response.Charset = "GB2312"; 
  234.  
  235.          //假定导出的文件名为FileName.doc 
  236.  
  237.          Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.doc"); 
  238.  
  239.          Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); 
  240.  
  241.          ////设置导出文件的格式 
  242.  
  243.          Response.ContentType = "application/ms-word"; 
  244.  
  245.          //关闭ViewState 
  246.  
  247.          gvPersonList.EnableViewState = false; 
  248.  
  249.          System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ZH-CN", true); 
  250.  
  251.          System.IO.StringWriter stringWriter = new System.IO.StringWriter(cultureInfo); 
  252.  
  253.          System.Web.UI.HtmlTextWriter textWriter = new System.Web.UI.HtmlTextWriter(stringWriter); 
  254.  
  255.          gvPersonList.RenderControl(textWriter); 
  256.  
  257.          // //把HTML写回浏览器 
  258.  
  259.          Response.Write(stringWriter.ToString()); 
  260.  
  261.          Response.End(); 
  262.  
  263.      } 
  264.  
  265. } 
需要说明的是:在asp.net2.0环境下,VerifyRenderingInServerForm(Control control)这个方法不override的话,则会出现“错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内”这个错误。

分享:使用存储过程实现用户登录(含代码)
程序代码: public SqlDataReader GetUserLoginByProc(string sUserName,string sPassword) { ///创建链接 SqlConnection myConnection = new SqlConnection( ConfigurationManager.ConnectionStrings[数据库连接字符].ConnectionString); ///创建Command S

来源:模板无忧//所属分类:.Net教程/更新时间:2012-06-13
相关.Net教程: