Monday, 17 March 2014

Bind and Export GridView data to PDF file in asp.net(C#, VB.Net)

Bind and Export GridView data to PDF file in asp.net(C#, VB.Net)

Introduction: In previous articles i explained How to bind and Export GridView data to Ms Word file and How to bind and Export GridView data to Ms Excel file  and Bind and Export GridView data to CSV file in asp.net and Bind,Save,Edit,Update,Cancel,Delete,Paging example in GridView and Search in gridview and How to Bind,save,edit,update,delete records from DataList and How to pass parameter to stored procedure using SqlDataAdapter and check login in asp.net  and  How to read DataKeyName from GridView on SelectedindexChanging event of GridView .
In this article I am going to explain how easily you can bind GridView with sql server database data and Export that Gridview data to PDF (Portable Document Format) file using asp.net with C# and VB.Net.  First we will learn how to bind data from sql server table to Gridview data control and then how to export that Gridview data to PDF file
Bind and Export GridView data to PDF File in asp.net
Click on image to enlarge
Implementation: Let’s understand by creating an asp.net web application
    Bind and Export GridView data to PDF in asp.net
    Click on image to enlarge
  • Create a Database e.g. "MyDataBase" and a table under that DataBase in Sql Server and name it "EMPLOYEE" as shown in figure: 


Note: EMP_ID column is set to Primary key and Identity specification is set to yes with Identity increment and Identity seed equal to 1. Insert some data in this table that you  want to show in the Gridview.


  • Now in web.config file add the connectionstring under <configuration> tag
<connectionStrings>
    <add name="conStr" connectionString="Data Source=LocalServer;Initial Catalog=MyDataBase;Integrated Security=True"/>
  </connectionStrings>

Note: Replace the Data Source and Initial Catalog as per your application.
  • In the design page (.aspx) drag and place a GridView data control from visual studio toolbox to bind data and also place a Button control to Export the GridView data to PDF file.
Source Code:

<fieldset style="width:360px;">
            <legend>Bind and Export GridView data to PDF in asp.net</legend>
            <table>
                <tr>
                    <td>
                        <asp:GridView ID="grEmp" runat="server" AllowPaging="True" AutoGenerateColumns="False"
                   GridLines="None" Width="100%" CellPadding="4" ForeColor="#333333">
                   
                    <AlternatingRowStyle BackColor="White" ForeColor="#284775" />                   
                    <Columns>
                        <asp:BoundField DataField="EMP_NAME" HeaderText="Emp Name"  />
                        <asp:BoundField DataField="DEPT" HeaderText="Department"  />
                        <asp:BoundField DataField="SALARY" HeaderText="salary"  />
                        <asp:BoundField DataField="EMAIL_ID" HeaderText="Email Id" />
                    </Columns>                  
                    <EditRowStyle BackColor="#999999" />
                    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                    <SortedAscendingCellStyle BackColor="#E9E7E2" />
                    <SortedAscendingHeaderStyle BackColor="#506C8C" />
                    <SortedDescendingCellStyle BackColor="#FFFDF8" />
                    <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
                </asp:GridView>
                    </td>               
                </tr>
                <tr>
                    <td>
<asp:Button ID="btnExportToPdf" runat="server" Text="Export To PDF File" OnClick="btnExportToPdf_Click" />
                    </td>
                </tr>
            </table>
        </fieldset>
  • To export gridview data to pdf file you need to add the reference of itextsharp.dll in to you website. Below are the steps to download and add itextsharp.dll to your application.
Step 1: open the link itextpdf.com/download.php in the browser
Step 2: You will find a link "Download iTextSharp", the C# port of the library
Step 3: On clicking the link you will find the link to download the latest version. The current version i found right now is  is itextsharp-all-5.4.2.zip (5.0 MB)
Step 4: Extract the downloaded zipped folder itextsharp-all-5.4.2.zip.There are also some other zipped folders inside.You just extract the folder itextsharp-dll-core and you will find the required itextsharp.dll.
Step: 5: Copy the itextsharp.dll file and paste in the Bin folder of your root directory. If there is no Bin folder in the root directory then right clcik on your website name in the solution explorer -> Add -> Add ASP.NET Folder -> Bin. Now paste copied itextsharp.dll file in the Bin folder
C#.Net Code to Bind and Export GridView data to PDF file
First include the following namespaces
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Net;
using System.Net.Mail;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.html.simpleparser;
Then write the code as:
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            BindEmpGrid();
        }
    }
    public override void VerifyRenderingInServerForm(Control control)
    {
        //It solves the error "Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server."
    }
    protected void BindEmpGrid()
    {
        SqlCommand cmd = new SqlCommand("select * from EMPLOYEE", con);
        DataTable dt = new DataTable();
        SqlDataAdapter adp = new SqlDataAdapter(cmd);
        adp.Fill(dt);
        grEmp.DataSource = dt;
        grEmp.DataBind();
    }
  protected void btnExportToPdf_Click(object sender, EventArgs e)
    {
        try
        {
            Response.ClearContent();
            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment;filename=MyPdfFile.pdf");
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            StringWriter strWrite = new StringWriter();
            HtmlTextWriter htmWrite = new HtmlTextWriter(strWrite);
            HtmlForm frm = new HtmlForm();
            grEmp.Parent.Controls.Add(frm);
            frm.Attributes["runat"] = "server";
            frm.Controls.Add(grEmp);
            frm.RenderControl(htmWrite);
            StringReader sr = new StringReader(strWrite.ToString());
            Document pdfDoc = new Document(PageSize.A4, 8f, 8f, 8f, 2f);
            HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
            PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
            pdfDoc.Open();
            htmlparser.Parse(sr);
            pdfDoc.Close();
            Response.Write(pdfDoc);
            Response.Flush();
            Response.End();
        }
        catch (Exception ex) { }
    }
VB.Net Code to Bind and Export GridView data to PDF file
First include the following namespaces
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Net
Imports System.Net.Mail
Imports System.Web.UI.HtmlControls
Imports System.IO
Imports System.Text
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports iTextSharp.text.html.simpleparser
Then write the code as:
  Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("conStr").ConnectionString)
    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            BindEmpGrid()
        End If
    End Sub
    Public Overrides Sub VerifyRenderingInServerForm(control As Control)
        'It solves the error "Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server."
    End Sub
    Protected Sub BindEmpGrid()
        Dim cmd As New SqlCommand("select * from EMPLOYEE", con)
        Dim dt As New DataTable()
        Dim adp As New SqlDataAdapter(cmd)
        adp.Fill(dt)
        grEmp.DataSource = dt
        grEmp.DataBind()
    End Sub
Protected Sub btnExportToPdf_Click(sender As Object, e As EventArgs)
        Try
            Response.ClearContent()
            Response.ContentType = "application/pdf"
            Response.AddHeader("content-disposition", "attachment;filename=MyPdfFile.pdf")
            Response.Cache.SetCacheability(HttpCacheability.NoCache)
            Dim strWrite As New StringWriter()
            Dim htmWrite As New HtmlTextWriter(strWrite)
            Dim frm As New HtmlForm()
            grEmp.Parent.Controls.Add(frm)
            frm.Attributes("runat") = "server"
            frm.Controls.Add(grEmp)
            frm.RenderControl(htmWrite)
            Dim sr As New StringReader(strWrite.ToString())
            Dim pdfDoc As New Document(PageSize.A4, 8.0F, 8.0F, 8.0F, 2.0F)
            Dim htmlparser As New HTMLWorker(pdfDoc)
            PdfWriter.GetInstance(pdfDoc, Response.OutputStream)
            pdfDoc.Open()
            htmlparser.Parse(sr)
            pdfDoc.Close()
            Response.Write(pdfDoc)
            Response.Flush()
            Response.[End]()
        Catch ex As Exception
        End Try
    End Sub
Notice that I have added an overriding function VerifyRenderingInServerForm in the code behind. This is to resolve the error “Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server” that may occur while exporting GridView data to MS Excel file or MS Word file or PDF(Portable Document Format) or CSV (Comma separated value) file. 

Note: To view complete article on why this error occur and how to resolve that error, read my article “How to Solve Error Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server
  • After exporting gridview data to PDF file, will look as shown in figure:

Bind and Export GridView data to PDF File in asp.net

No comments:

Post a Comment