One of the most common functionality in any  ASP.NET application is to print forms and controls.
There are a lot of options to print forms using client scripts. In the article, we will see how
to print controls in ASP.NET 2.0 using both server side code and javascript.
There are a lot of options to print forms using client scripts. In the article, we will see how
to print controls in ASP.NET 2.0 using both server side code and javascript.
Step 1: Create a PrintHelper  class. This class contains a method called PrintWebControl that
can print any control like a GridView, DataGrid, Panel, TextBox etc. The class makes a call to
window.print() that simulates the print button.
can print any control like a GridView, DataGrid, Panel, TextBox etc. The class makes a call to
window.print() that simulates the print button.
Note: I have not written this class and  neither do I know the original author. I will be happy 
to add a reference in case someone knows.
to add a reference in case someone knows.
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);
new System.Web.UI.HtmlTextWriter(stringWrite);
        if (ctrl is  WebControl)
         {
             Unit w = new Unit(100, UnitType.Percentage);  
((WebControl)ctrl).Width = w;
((WebControl)ctrl).Width = w;
         }
        Page pg = new Page();
         pg.EnableEventValidation = false;  
        if (Script != string.Empty)
         {
             pg.ClientScript.RegisterStartupScript(pg.GetType(),
"PrintJavaScript", Script);
"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>");
print();</script>");
        HttpContext.Current.Response.End();
     }
}
VB.NET
Imports  System
Imports  System.Data
Imports  System.Configuration
Imports  System.Web
Imports  System.Web.Security
Imports  System.Web.UI
Imports  System.Web.UI.WebControls
Imports  System.Web.UI.WebControls.WebParts
Imports  System.Web.UI.HtmlControls
Imports  System.IO
Imports  System.Text
Imports  System.Web.SessionState
Public Class PrintHelper
     Public Sub New()
     End Sub
     Public Shared Sub  PrintWebControl(ByVal ctrl As Control)
         PrintWebControl(ctrl, String.Empty)
     End Sub
     Public Shared Sub  PrintWebControl(ByVal ctrl As Control, 
ByVal Script As String)
ByVal Script As String)
        Dim stringWrite As StringWriter = New StringWriter()
        Dim htmlWrite As System.Web.UI.HtmlTextWriter = 
New System.Web.UI.HtmlTextWriter(stringWrite)
New System.Web.UI.HtmlTextWriter(stringWrite)
        If TypeOf  ctrl Is WebControl Then
             Dim w As Unit = New Unit(100,  UnitType.Percentage)
             CType(ctrl, WebControl).Width =  w
        End If
        Dim pg As  Page = New Page()
         pg.EnableEventValidation = False
        If Script <> String.Empty Then
             pg.ClientScript.RegisterStartupScript(pg.GetType(), 
"PrintJavaScript", Script)
"PrintJavaScript", Script)
        End If
        Dim frm As  HtmlForm = New  HtmlForm()
         pg.Controls.Add(frm)
         frm.Attributes.Add("runat", "server")
         frm.Controls.Add(ctrl)
         pg.DesignerInitialize()
         pg.RenderControl(htmlWrite)
        Dim strHTML As String =  stringWrite.ToString()
         HttpContext.Current.Response.Clear()
         HttpContext.Current.Response.Write(strHTML)
         HttpContext.Current.Response.Write("<script>window.print();
</script>")
</script>")
         HttpContext.Current.Response.End()
     End Sub
End Class
Step 2: Create two pages,  Default.aspx and Print.aspx. Default.aspx will 
contain the controls to be printed. Print.aspx will act as a popup page to
invoke the print functionality.
contain the controls to be printed. Print.aspx will act as a popup page to
invoke the print functionality.
Step 3: In your  Default.aspx, drag and drop a few controls that you 
would like to print. To print a group of controls, place them all in a
container control like a panel. This way if we print the panel using our
PrintHelper class, all the controls inside the panel gets printed.
would like to print. To print a group of controls, place them all in a
container control like a panel. This way if we print the panel using our
PrintHelper class, all the controls inside the panel gets printed.
Step 4: Add a print button  to the Default.aspx and in the code behind, 
type the following code:
type the following code:
C#
protected void btnPrint_Click(object sender, EventArgs e)
     {
         Session["ctrl"] =  Panel1;
         ClientScript.RegisterStartupScript(this.GetType(), 
"onclick", "<script language=javascript>window.open
('Print.aspx','PrintMe','height=300px,width=300px,
scrollbars=1');/script>");
"onclick", "<script language=javascript>window.open
('Print.aspx','PrintMe','height=300px,width=300px,
scrollbars=1');/script>");
     }                  
VB.NET
Protected Sub btnPrint_Click(ByVal sender As Object,  ByVal e As  
System.EventArgs) Handles btnPrint.Click
System.EventArgs) Handles btnPrint.Click
         Session("ctrl") =  Panel1
         ClientScript.RegisterStartupScript(Me.GetType(), "onclick", 
"<script language=javascript>window.open ('Print.aspx',
'PrintMe','height=300px,width=300px,
scrollbars=1');</script>")
"<script language=javascript>window.open ('Print.aspx',
'PrintMe','height=300px,width=300px,
scrollbars=1');</script>")
End Sub
The code stores the control in a Session variable to  be accessed in the pop up page,
Print.aspx. If you want to print directly on button click, call the Print functionality in
the following manner :
Print.aspx. If you want to print directly on button click, call the Print functionality in
the following manner :
PrintHelper.PrintWebControl(Panel1);
Step 5:  In the Page_Load event of Print.aspx.cs, add the following  code:
C#
protected void Page_Load(object sender, EventArgs e)
     {
        Control ctrl = (Control)Session["ctrl"];
        PrintHelper.PrintWebControl(ctrl);
    }
VB.NET
Protected Sub Page_Load(ByVal sender As Object,  ByVal e As System.EventArgs) 
Handles Me.Load
Handles Me.Load
        Dim ctrl As  Control = CType(Session("ctrl"), Control)
         PrintHelper.PrintWebControl(ctrl)
End Sub
Well that's it. Try out the sample attached with this article and  print any control you desire.
 
 






