Saturday, 26 May 2012

Print Functionality in ASPDOTNET

One of the most common functionality in any ASP.NET application is to print forms and controls.
In this article, I am going to show how can we achieve this print functionality in our application. For this, I created a PrintHelper class. In this class, I made a method 'PrintWebControl'. With this method we can print any server control alike GridView, DataGrid, Panel, TextBox etc.
This is my PrintHelper.cs

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;

/// <summary>
/// Summary description for PrintHelper
/// </summary>
public class PrintHelper
    public PrintHelper()
        // TODO: Add constructor logic here
    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();
        string strHTML = stringWrite.ToString();

Here, in this application, I created 2 pages. First is the default page of the content that I want to print.On the same page, I set a Print button also. When it will be clicked, it will redirect the user to the second page, named as 'Print.aspx'.


@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html xmlns="">
<head runat="server">
    <title>Pring in ASP.NET</title>
    <form id="form1" runat="server">
            <asp:Button ID="btnPrint" runat="server" Text="Print" OnClick="btnPrint_Click" /><br />
            <asp:Panel ID="pnl1" runat="server">
                <table cellpadding="4" cellspacing="4" width="50%" align="center">
                        <td align="center">
                            Fill all information
                            <asp:Label ID="Label1" runat="server" Text="Email" Width="130px"></asp:Label>
                            <asp:TextBox runat="server"></asp:TextBox>
                            <asp:Label ID="Label2" runat="server" Text="Name" Width="130px"></asp:Label>
                            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                            <asp:Label ID="Label6" runat="server" Text="Country" Width="130px"></asp:Label>
                            <asp:TextBox ID="TextBox5" runat="server"></asp:TextBox>
                            <asp:Label ID="Label3" runat="server" Text="Mobile" Width="130px"></asp:Label>
                            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>


Image 1.
Click event of 'print' button is:

 void btnPrint_Click(object sender, EventArgs e)
        Session["ctrl"] = pnl1;
        ClientScript.RegisterStartupScript(this.GetType(), "onclick""<script language=javascript>'Print.aspx','PrintMe','height=300px,width=300px,scrollbars=1');</script>");
When, the 'Print' button is clicked,screen will be looking as under in the Image 2

Image 2.
Following is the load event of this page, 'Print.aspx':

 void Page_Load(object sender, EventArgs e)
        Control ctrl = (Control)Session["ctrl"];

No comments:

Post a Comment

Note: only a member of this blog may post a comment.