Search This Blog

Wednesday, September 1, 2010

Print functionality in ASP.Net GridView

In this article I’ll explain how to allow the users to print the contents of the ASP.Net GridView control. So let’s start.
I’ll explain two options, first printing the current page of the ASP.Net GridView control and second printing all the pages.
Print Current Page of ASP.Net GridView control
Below is the Button Event handler that is called when the Print Button is clicked
protected void  PrintCurrentPage(object sender, EventArgs e)
{
    GridView1.PagerSettings.Visible = false;
    GridView1.DataBind();
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    GridView1.RenderControl(hw);
    string gridHTML = sw.ToString().Replace("\"", "'")
        .Replace(System.Environment.NewLine, "");
    StringBuilder sb = new StringBuilder();
    sb.Append("<script type = 'text/javascript'>");
    sb.Append("window.onload = new function(){");
    sb.Append("var printWin = window.open('', '', 'left=0");
    sb.Append(",top=0,width=1000,height=600,status=0');");
    sb.Append("printWin.document.write(\"");
    sb.Append(gridHTML);
    sb.Append("\");");
    sb.Append("printWin.document.close();");
    sb.Append("printWin.focus();");
    sb.Append("printWin.print();");
    sb.Append("printWin.close();};");
    sb.Append("</script>"); 
    ClientScript.RegisterStartupScript(this.GetType(), "GridPrint", sb.ToString());
    GridView1.PagerSettings.Visible = true;
    GridView1.DataBind();
}
As you’ll notice I have created a JavaScript method to print the GridView content which is called when the page is loaded.
Print All Pages of ASP.Net GridView control
Below is the Button Event handler that is called when the Print All Button is clicked
protected void  PrintAllPages(object sender, EventArgs e)
{
    GridView1.AllowPaging = false;
    GridView1.DataBind();
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    GridView1.RenderControl(hw);
    string gridHTML = sw.ToString().Replace("\"", "'")
        .Replace(System.Environment.NewLine, "");
    StringBuilder sb = new StringBuilder();
    sb.Append("<script type = 'text/javascript'>");
    sb.Append("window.onload = new function(){");
    sb.Append("var printWin = window.open('', '', 'left=0");
    sb.Append(",top=0,width=1000,height=600,status=0');");
    sb.Append("printWin.document.write(\"");
    sb.Append(gridHTML);
    sb.Append("\");");
    sb.Append("printWin.document.close();");
    sb.Append("printWin.focus();");
    sb.Append("printWin.print();");
    sb.Append("printWin.close();};");
    sb.Append("</script>"); 
    ClientScript.RegisterStartupScript(this.GetType(), "GridPrint", sb.ToString());
    GridView1.AllowPaging = true;
    GridView1.DataBind();
}
The only difference in the above function is that I am disabling the paging so that all pages are printed.

1 comment:

  1. Great article! But can I print a page that contain many gridview not just one

    ReplyDelete

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