在ASPNET应用程序中最常用的一个功能就是打印表单和控件。利用客户端脚本可以实现很多种打印表单的方法。在本文中我们将看到如何利用服务端代码和JAVASCRIPT来实现打印表单的功能。
步骤一:创建一个 PrintHelper 类,该类包含一个PrintWebControl() 方法,该方法可以打印任何控件如GridView,DataGrid,TextBox,Panel等.
该类调用 window.Print() 方法来模拟实现打印功能。
注意:该类并不是我写的,我也不知道原作者是谁,如果谁知道的话,请在此附上链接,我将非常高兴(原文中还有此类的VB版本,详祥,请参见文后的原文链接)。
C#
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text;
using System.Web.SessionState;
public class PrintHelper
{
public PrintHelper()
{
}
public static void PrintWebControl(Control ctrl)
{
PrintWebControl(ctrl, string.Empty);
}
public static void PrintWebControl(Control ctrl, string Script)
{
StringWriter stringWrite = new StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);
if (ctrl is WebControl)
{
Unit w = new Unit(100, UnitType.Percentage); ((WebControl)ctrl).Width = w;
}
Page pg = new Page();
pg.EnableEventValidation = false;
if (Script != string.Empty)
{
pg.ClientScript.RegisterStartupScript(pg.GetType(),"PrintJavaScript", Script);
}
HtmlForm frm = new HtmlForm();
pg.Controls.Add(frm);
frm.Attributes.Add("runat", "server");
frm.Controls.Add(ctrl);
pg.DesignerInitialize();
pg.RenderControl(htmlWrite);
string strHTML = stringWrite.ToString();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Write(strHTML);
HttpContext.Current.Response.Write("<script>window.print();</script>");
HttpContext.Current.Response.End();
}
}
步骤二:建立两个aspx页面,如:Default.aspx 和 Print.aspx.Default.aspx页面包含需要打印的控件。Print.aspx作为一个弹出页面以调用打印方法。
步骤三:在Default.aspx 中拖放一些您需要打印的控件。为了方便打印控件,我们可以将需要打印的控件放在一个像Panel控件的容器中,这样的话,如果我们调用PrintHelper 类,则可以打印出容器中的所有控件。
步骤四:在Default.aspx 中增加“打印”按钮,在该页面的后台代码中输入以下代码:
C#
protected void btnPrint_Click(object sender, EventArgs e)
{
Session["ctrl"] = Panel1;
ClientScript.RegisterStartupScript(this.GetType(), " "<script language=javascript>window.open('Print.aspx','PrintMe','height=300px,width=300px,scrollbars=1');</script>");
}
在上面的代码中可以看到,我们将存放控件的Panel 面板,存放在一个Session变量中,该变量可以在弹出页面Print.aspx中访问。
如果您希望在点击按钮时直接打印页面,可以在代码中加入以下语句:
PrintHelper.PrintWebControl(Panel1);//PrintHelper类的方法
步骤五:在Print.aspx.cs文件总,为Page_Load()方法添加如下处理过程:
protected void Page_Load(object sender, EventArgs e)
{
Control ctrl = (Control)Session["ctrl"];
PrintHelper.PrintWebControl(ctrl);
}
好了,到此,打印控件的功能以全部实现。大家可以利用这篇文章中提到的方法,打印任何您想要打印的东西,文章中涉及到的所有源代码可以在
<a href="http://cid2c5f5b0560e374cb.skydrive.live.com/self.aspx/.Public/Uploads/PrintingInASPNET.zip">这儿</a>
下载。
原文链接:http://www.dotnetcurry.com/ShowArticle.aspx?ID=92