如何在ASPNET2.0中实现打印功能

 在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

你可能感兴趣的:(打印,职场,控件,休闲,ASPNET)