Wednesday, August 29, 2012

Export gridview data to PDF using asp.net using C#

Here i will explain How to Export Gridview Data To PDF using ITextSharp. While Exporting I will explain the problems how to solve them. First download the ItextSharp from the above link.

Here i am binding Gridview In the Page_Load event



Out Put :






 ASPX Page :


<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="ExpGvDataToPDF._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <center>  
       <asp:Button ID="btnExport" runat="server" Text="Export To PDF" OnClick="btnExport_Click"/>
       <br />
       <br />
       <asp:GridView ID="ExpGvToPDFControl" runat="server" AllowPaging="True"                   AutoGenerateColumns="false" BackColor="White" BorderColor="#CC9966" BorderStyle="None"        BorderWidth="1px" CellPadding="4" onpageindexchanging="ExpGvToPDFControl_PageIndexChanging">
            <Columns>
            <asp:BoundField DataField="empid" HeaderText="EmpID" />
            <asp:BoundField DataField="fname" HeaderText="FirstName" />
            <asp:BoundField DataField="lname" HeaderText="LastName" />
            <asp:BoundField DataField="qualification" HeaderText="Qualifi" />
            <asp:BoundField DataField="designation" HeaderText="Designa" />
            <asp:BoundField DataField="sal" HeaderText="Salary" />
            <asp:BoundField DataField="DeptID" HeaderText="DeptID" />
            <asp:BoundField DataField="empmail" HeaderText="MailID" />
            </Columns>
           <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
           <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
           <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
           <RowStyle BackColor="White" ForeColor="#330099" />
           <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
           <SortedAscendingCellStyle BackColor="#FEFCEB" />
           <SortedAscendingHeaderStyle BackColor="#AF0101" />
           <SortedDescendingCellStyle BackColor="#F6F0C0" />
           <SortedDescendingHeaderStyle BackColor="#7E0000" />
       </asp:GridView>  
   </center>
</asp:Content>


Code Behind File :

using iTextSharp.text;
using iTextSharp.text.pdf;

namespace ExpGvDataToPDF
{
    public partial class _Default : System.Web.UI.Page
    {
        private string constring =                   ConfigurationManager.ConnectionStrings["myconstring"].ConnectionString;
        SqlDataAdapter da;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindGrid();
            }
        }
       
        private void BindGrid()
        {
            try
            {
                DataSet ds = new DataSet();
                da = new SqlDataAdapter("select * from EMPTable", constring);
                da.Fill(ds, "GetEmpInfo");
                ExpGvToPDFControl.DataSource = ds.Tables[0];
                ExpGvToPDFControl.DataBind();
            }
            catch (Exception ex)
            {
                string ErrMsg = ex.Message;
            }  
        }

        protected void btnExport_Click(object sender, EventArgs e)
        {
            try
            {
                Response.ContentType = "application/pdf";
                Response.AddHeader("content-disposition",
                                        "attachment;filename=EmpDetails.pdf");
                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                StringWriter sw = new StringWriter();
                HtmlTextWriter hw = new HtmlTextWriter(sw);
                ExpGvToPDFControl.AllowPaging = false;               
                BindGrid();
                ExpGvToPDFControl.RenderControl(hw);
                ExpGvToPDFControl.HeaderRow.Style.Add("width", "15%");
                ExpGvToPDFControl.HeaderRow.Style.Add("font-size", "10px");
                ExpGvToPDFControl.Style.Add("text-decoration", "none");
                ExpGvToPDFControl.Style.Add("font-family", "Arial, Helvetica, sans-serif;");
                ExpGvToPDFControl.Style.Add("font-size", "8px");
                StringReader sr = new StringReader(sw.ToString());
                iTextSharp.text.Document pdfDoc =
              new iTextSharp.text.Document(PageSize.A4, 7f, 7f, 7f, 0f);
                iTextSharp.text.html.simpleparser.HTMLWorker htmlparser = new
              iTextSharp.text.html.simpleparser.HTMLWorker(pdfDoc);
                PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
                pdfDoc.Open();
                htmlparser.Parse(sr);
                pdfDoc.Close();
                Response.Write(pdfDoc);
                Response.End();
            }
            catch (Exception ex)
            {
                string ErrMsg = ex.Message;
            }
        }

        public override void VerifyRenderingInServerForm(Control control)
        {
            // verifies the control is rendered here
        }

        protected void ExpGvToPDFControl_PageIndexChanging(object sender,
                                  System.Web.UI.WebControls.GridViewPageEventArgs e)
        {
            ExpGvToPDFControl.PageIndex = e.NewPageIndex;
            BindGrid();
        }
    }
}

Errors 1 :

Control 'MainContent_ExpGvToPDFControl' of type 'GridView' must be placed inside a form tag with runat=server.





        
       public override void VerifyRenderingInServerForm(Control control)
        {
            // verifies the control is rendered here
        }

 Errors 2 :

The document has no pages.

  for the above error Bind the grid again with BindGrid(); Method

 

Some times it is required to show Heading In PDF so

  to add multiple headers to gridview GoHear

 

Download