将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.      private string firstName = "赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华"
  49.  
  50.      private string lastName = "猛勇刚强豹彪雁燕蓉菲"
  51.  
  52.      protected void Page_Load(object sender, EventArgs e) 
  53.  
  54.      { 
  55.  
  56.          if (!Page.IsPostBack) 
  57.  
  58.          { 
  59.  
  60.              BindGridView(); 
  61.  
  62.          } 
  63.  
  64.      } 
  65.  
  66.      private void BindGridView() 
  67.  
  68.      { 
  69.  
  70.          DataTable myData = CreateDataTable(); 
  71.  
  72.          Session["MyData"] = myData; 
  73.  
  74.          gvPersonList.DataSource = myData
  75.  
  76.          gvPersonList.DataBind(); 
  77.  
  78.      } 
  79.  
  80.      //手动生成DataTable 
  81.  
  82.      private DataTable CreateDataTable() 
  83.  
  84.      { 
  85.  
  86.          DataTable data = new DataTable(); 
  87.  
  88.          DataColumn dcId = new DataColumn("ID", typeof(Int32)); 
  89.  
  90.          //设置ID列自动递增 
  91.  
  92.          dcId.AutoIncrement = true
  93.  
  94.          //设置ID列初始值为1 
  95.  
  96.          dcId.AutoIncrementSeed = 1
  97.  
  98.          //设置ID列递增步长为1 
  99.  
  100.          dcId.AutoIncrementStep = 1
  101.  
  102.          //将ID列添加到DataTable中 
  103.  
  104.          data.Columns.Add(dcId); 
  105.  
  106.          data.Columns.Add(new DataColumn("Name", typeof(string))); 
  107.  
  108.          data.Columns.Add(new DataColumn("Age", typeof(int))); 
  109.  
  110.          data.Columns.Add(new DataColumn("Sex", typeof(bool))); 
  111.  
  112.          data.Columns.Add(new DataColumn("Married", typeof(bool))); 
  113.  
  114.          DataRow dataRow = null
  115.  
  116.          Random random = new Random(); 
  117.  
  118.          //随机生成20条记录 
  119.  
  120.          for (int i = 0; i < 20; i++) 
  121.  
  122.          { 
  123.  
  124.              datadataRow = data.NewRow(); 
  125.  
  126.              //随机生成姓名 
  127.  
  128.              dataRow["Name"] = firstName.Substring(random.Next(firstName.Length), 1) + lastName.Substring(random.Next(lastName.Length), 1); 
  129.  
  130.              //随即生成介于20至100之间的年龄 
  131.  
  132.              int age = random.Next(20, 100); 
  133.  
  134.              dataRow["Age"] = age; 
  135.  
  136.              //随即设置性别 
  137.  
  138.              bool sex = (random.Next(100) % 2 == 0) ? true : false; 
  139.  
  140.              dataRow["Sex"] = sex; 
  141.  
  142.              if (((sex == true) && (age >= 22)) || ((sex == false) && (age >= 20)))//男性结婚年龄大于22周岁,女性结婚年龄大于20周岁 
  143.  
  144.              { 
  145.  
  146.                  dataRow["Married"] = (random.Next(500) % 2 == 0) ? true : false; 
  147.  
  148.              } 
  149.  
  150.              else 
  151.  
  152.              { 
  153.  
  154.                  dataRow["Married"] = false; 
  155.  
  156.              } 
  157.  
  158.              data.Rows.Add(dataRow); 
  159.  
  160.          } 
  161.  
  162.          return data; 
  163.  
  164.      } 
  165.  
  166.      //override掉这个方法 
  167.  
  168.      public override void VerifyRenderingInServerForm(Control control) 
  169.  
  170.      { 
  171.  
  172.          //注释掉下面的代码,否则在asp.net2.0下会报错(注:GridView是asp.net 2.0下的控件,1.1下一些控件也可以导出成Excel或者Word) 
  173.  
  174.          //base.VerifyRenderingInServerForm(control); 
  175.  
  176.      } 
  177.  
  178.      protected void btnToExcel_Click(object sender, EventArgs e) 
  179.  
  180.      { 
  181.  
  182.          Response.Clear(); 
  183.  
  184.          Response.BufferOutput = true
  185.  
  186.          //设定输出的字符集 
  187.  
  188.          Response.Charset = "GB2312"
  189.  
  190.          //假定导出的文件名为FileName.xls 
  191.  
  192.          Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls"); 
  193.  
  194.          Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); 
  195.  
  196.          //设置导出文件的格式 
  197.  
  198.          Response.ContentType = "application/ms-excel"
  199.  
  200.          //关闭ViewState 
  201.  
  202.          EnableViewState = false
  203.  
  204.          System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ZH-CN", true); 
  205.  
  206.          System.IO.StringWriter stringWriter = new System.IO.StringWriter(cultureInfo); 
  207.  
  208.          System.Web.UI.HtmlTextWriter textWriter = new System.Web.UI.HtmlTextWriter(stringWriter); 
  209.  
  210.          gvPersonList.RenderControl(textWriter); 
  211.  
  212.          //把HTML写回浏览器 
  213.  
  214.          Response.Write(stringWriter.ToString()); 
  215.  
  216.          Response.End(); 
  217.  
  218.      } 
  219.  
  220.      //导出成Word文件 
  221.  
  222.      protected void btnToWord_Click(object sender, EventArgs e) 
  223.  
  224.      { 
  225.  
  226.          Response.Clear(); 
  227.  
  228.          Response.BufferOutput = true
  229.  
  230.          //设定输出的字符集 
  231.  
  232.          Response.Charset = "GB2312"
  233.  
  234.          //假定导出的文件名为FileName.doc 
  235.  
  236.          Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.doc"); 
  237.  
  238.          Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); 
  239.  
  240.          ////设置导出文件的格式 
  241.  
  242.          Response.ContentType = "application/ms-word"
  243.  
  244.          //关闭ViewState 
  245.  
  246.          gvPersonList.EnableViewState = false
  247.  
  248.          System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ZH-CN", true); 
  249.  
  250.          System.IO.StringWriter stringWriter = new System.IO.StringWriter(cultureInfo); 
  251.  
  252.          System.Web.UI.HtmlTextWriter textWriter = new System.Web.UI.HtmlTextWriter(stringWriter); 
  253.  
  254.          gvPersonList.RenderControl(textWriter); 
  255.  
  256.          // //把HTML写回浏览器 
  257.  
  258.          Response.Write(stringWriter.ToString()); 
  259.  
  260.          Response.End(); 
  261.  
  262.      } 
  263.  
需要说明的是:在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教程