實作GridView中的資料的列印和導出到Excel
MSDN上對 VerifyRenderingInServerForm 方法的解釋是:
必須位于 <form runat=server> 标記中的控件可以在呈現之前調用此方法,以便在控件被置于标記外時顯示錯誤資訊。發送回或依賴于注冊的腳本塊的控件應該在 Control.Render 方法的重寫中調用此方法。呈現伺服器窗體元素的方式不同的頁可以重寫此方法以在不同的條件下引發異常。
如果回發或使用用戶端腳本的伺服器控件沒有包含在 HtmlForm 伺服器控件 (<form runat="server">) 标記中,它們将無法正常工作。這些控件可以在呈現時調用該方法,以在它們沒有包含在 HtmlForm 控件中時提供明确的錯誤資訊。
開發自定義伺服器控件時,通常在為任何類型的輸入标記重寫 Render 方法時調用該方法。這在輸入控件調用 GetPostBackEventReference 或發出用戶端腳本時尤其重要。複合伺服器控件不需要作出此調用,沒有這個方法,程式将報錯。
前台代碼:
1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TeacherReport.aspx.cs" Inherits="TeacherCenter_TeacherReport" %>
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 <head runat="server">
7 <title>教師花名冊</title>
8 <link type="text/css" rel="stylesheet" href="../App_themes/css/global.css" target="_blank" rel="external nofollow" />
9 </head>
10 <body>
11 <object id="WebBrowser" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" height="0"
12 width="0">
13 </object>
14 <form id="form1" runat="server">
15 <div style="text-align: center">
16 <table cellpadding="0" style="text-align: left" width="600">
17 <tr height="23">
18 <td align="center" style="font-size: 25px; height: 23px">
19 臨沂市蘭山區委黨校</td>
20 </tr>
21 <tr height="23">
22 <td align="center" colspan="2" style="font-size: 25px; height: 23px">
23 教師花名冊</td>
24 </tr>
25 <tr>
26 <td align="right" colspan="2">
27 <asp:Label ID="lblDateTime" runat="server" Text="lblDateTime" Width="110px"></asp:Label></td>
28 </tr>
29 <tr>
30 <td colspan="2" style="height: 21px" valign="top">
31 <asp:GridView ID="gvTeacherInfoList" runat="server" AllowPaging="True"
32 AutoGenerateColumns="False"
33 PageSize="40" Width="600px" OnPageIndexChanging="gvTeacherInfoList_PageIndexChanging">
34 <FooterStyle HorizontalAlign="Right" />
35 <Columns>
36 <asp:TemplateField HeaderText="序号">
37 <HeaderTemplate>
38 序号
39 </HeaderTemplate>
40 <ControlStyle Width="10%" />
41 <ItemTemplate>
42 <%#Container.DataItemIndex+1%>
43 </ItemTemplate>
44 </asp:TemplateField>
45 <asp:BoundField DataField="Teacher_Name" HeaderText="姓名" SortExpression="Teacher_Name" />
46 <asp:BoundField DataField="TeacherSex" HeaderText="性别" SortExpression="TeacherSex" />
47 <asp:BoundField DataField="Teacher_Age" HeaderText="年齡" SortExpression="Teacher_Age" />
48 <asp:BoundField DataField="TeacherDuty" HeaderText="職務" SortExpression="TeacherDuty" />
49 <asp:BoundField DataField="Teacher_Speciality" HeaderText="專業" SortExpression="Teacher_Speciality" />
50 <asp:BoundField DataField="Teacher_RelationMode" HeaderText="聯系方式" />
51 </Columns>
52 </asp:GridView>
53 </td>
54 </tr>
55 <tr>
56 <td align="right" colspan="2" style="height: 21px" valign="top">
57 <asp:Button ID="btnPrint" runat="server" Text="打 印" Width="53px" OnClick="btnPrint_Click" />
58 <asp:Button ID="btnExcel" runat="server" Text="導出到Excel" OnClick="btnExcel_Click" /></td>
59 </tr>
60 </table>
61
62 </div>
63 </form>
64 </body>
65 </html>
66
背景代碼:
1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Collections;
5 using System.Web;
6 using System.Web.Security;
7 using System.Web.UI;
8 using System.Web.UI.WebControls;
9 using System.Web.UI.WebControls.WebParts;
10 using System.Web.UI.HtmlControls;
11 using System.Data.SqlClient;
12 using Lymit.DistanceEDU.Model;
13 using Lymit.Distanct.Model;
14 using BLL;
15
16 public partial class TeacherCenter_TeacherReport : System.Web.UI.Page
17 {
18 protected void Page_Load(object sender, EventArgs e)
19 {
20 if (!Page.IsPostBack)
21 {
22 BindTeacherInfo();
23 }
24 this.lblDateTime.Text = System.DateTime.Now.ToString("yyyy-MM-dd");
25 }
26
27 private void BindTeacherInfo()
28 {
29 TeacherController tc = TeacherController.GetInstance();
30 string sex = "全部";
31 DataTable dt = tc.GetTeacherRoster(sex);
32 this.gvTeacherInfoList.DataSource = dt.DefaultView;
33 this.gvTeacherInfoList.DataBind();
34 }
35
36 protected void gvTeacherInfoList_PageIndexChanging(object sender, GridViewPageEventArgs e)
37 {
38 this.gvTeacherInfoList.PageIndex = e.NewPageIndex;
39 BindTeacherInfo();
40 }
41
42 protected void btnExcel_Click(object sender, EventArgs e)
43 {
44 Response.Clear();
45 Response.Buffer = true;
46 Response.Charset = "GB2312";
47 Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
48 // 如果設定為 GetEncoding("GB2312");導出的檔案将會出現亂碼!!!
49 Response.ContentEncoding = System.Text.Encoding.UTF7;
50 Response.ContentType = "application/ms-excel";//設定輸出檔案類型為excel檔案。
51 System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
52 System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
53 this.gvTeacherInfoList.RenderControl(oHtmlTextWriter);
54 Response.Output.Write(oStringWriter.ToString());
55 Response.Flush();
56 Response.End();
57 }
58
59 public override void VerifyRenderingInServerForm( Control control )
60 {
61
62 }
63
64 protected override void Render(HtmlTextWriter writer)
65 {
66 if (Page != null)
67 {
68 Page.VerifyRenderingInServerForm(this);
69 }
70 base.Render(writer);
71 }
72 protected void btnPrint_Click(object sender, EventArgs e)
73 {
74 Response.Write("<script> window.print()</script>");
75 }
76 }