Click here to Skip to main content
15,883,853 members
Articles / Web Development / ASP.NET
Tip/Trick

How to Export Crystal Report on Button Click in to PDF, Excel, Word, HTML, Rtf in ASP.NET C#.

Rate me:
Please Sign up or sign in to vote.
4.66/5 (26 votes)
27 Jan 2014CPOL3 min read 425.7K   11.1K   25   49
This article discusses how to export Crystal Report on button click into PDF, Excel, Word, HTML, RTF in ASP.NET C#

Introduction

What Is Crystal Reports?

"In simplest terms, Crystal Reports is a report design tool that allows you to create reports capable of retrieving and formatting a result set from a database or other data source. In addition to simply reading data from a data source, Crystal Reports has its own formula language for creating calculations and includes a number of features that can be used to turn raw data into presentation-quality reports, with graphs, charts, running totals, and so on." (David McAmis, Professional Crystal Reports for Visual Studio .NET, 2nd edition)

We give this option to users to download there on copy of result what they want from search result.

Sqlserver Part

Create a Simple Table Name as PersonInfo:

SQL
create Table PersonInfo
(
PersonID int primary key IDENTITY(1,1) NOT NULL,
PersonName Nvarchar(100) NULL,
PersonAge int NULL,
PersonAddress Nvarchar(100) NULL,
PersonProfession nvarchar(100) NULL
)

Image 1

Inserting Records  

Insert Records into Table from backend

 Image 2 

Selecting Records for displaying on report Using StoredProcedure

SQL
CREATE Proc Usp_getPersonRecords
as
SELECT * FROM PersonInfo   

Create a new ASP.NET Web Application Project.

Image 3

Image 4

Add New Web form -> Name it as ExportRecords.aspx.

Image 5

Adding Crystal Report

Image 6

Image 7

When this Screen appears in front of you, just select (Standard) and Press Ok button.

Image 8

The Standard Report Creation Wizard will pop

Image 9

Select Create New Connection.  

  1. Inside That OLE DB
  2. A new Wizard will pop up OLE DB (ADO)

    Image 10

  3. It will ask for Provider
  4. Select (Microsoft OLE DB Provider for SQL Server)
  5. Click Next Button

    Image 11

Connection Information Wizard will appear.  

Just enter your SQL Server details here.

Image 12 

Then click on Next button

Image 13 

After click on Finish this wizard will appear.

Image 14 

  1. First select your Database where you have created table.
  2. Inside that you will find 3 options  
    1. dbo  
    2. INFORMATION_SCHEMA
    3. Sys  
  3. Select dbo (Here you will see 2 options)
    1. Tables
    2. Stored procedures
  4. Select Store procedures from it.

(Because we will bind Store procedures to report to display information)

 Image 15

The Store procedures Usp_getPersonRecords will appear in the list of data sources, add the Store procedures to selected table list by clicking on the right arrow.

Click Next button

This wizard will appear.

Image 16 

Select all columns and then clicking on the right arrow to move in Fields to Display

Image 17 

Click on Next Button

Image 18 

We will not perform Grouping Just click Next Button

This wizard will appear.

Image 19 

We will not perform Record Filter Just click Next Button

This wizard will appear.

Image 20 

Select Standard from it and click Finish.

After Finishing the crystal report will appear to you.

 Image 21

Just Save it.  

Let’s Move from sql to Web forms now. (ExportRecords.aspx)

On Page Add Crystal Report viewer and three images buttons

(I have add images to buttons)  

HTML
<form id="form1" runat="server">
<div style="margin: 0px; overflow: auto;">
<table width="100%">
<tr>
<td align="center">

<asp:ImageButton ID="Img1" Height="50px" ImageUrl="~/Images/PdfImage.jpg"
runat="server" onclick="Img1_Click" />

<asp:ImageButton ID="img2" Height="50px" ImageUrl="~/Images/index.jpg"
runat="server" onclick="img2_Click" />

<asp:ImageButton ID="img3" Height="50px" ImageUrl="~/Images/docx.png"
runat="server" onclick="img3_Click" />

<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" />

</td>
</tr>
</table>
</div>
</form>

Like this View you will see

Image 22 

On load for Binding crystal Report i have created Method GenerateReport().

You need to add Connection string above Page load.

SQL
SqlConnection con = new SqlConnection<br />(ConfigurationManager.ConnectionStrings["Myconstr"].ToString());

And add Connection string In Web.config.

For doing connection with database you need to add connection string to database Here is example of it.

Just replace here with your database value.

Data source

Database

User id

Password

<connectionStrings>
   <add name="Myconstr" connectionString="data source=SAI-PC; Database=MotorTraining;  user id=sa; password=Pass$123 ;" providerName="system.data.sqlclient"/>
</connectionStrings>

Here I have bind crystal report on page load event.

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GenerateReport();
            }
        }

This is method which I am using for binding crystal report on page load.

protected void GenerateReport()
        {
            SqlCommand cmd = new SqlCommand("Usp_getPersonRecords", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            DataTable datatable = new DataTable();
            da.Fill(datatable); // getting value according to imageID and fill dataset

            ReportDocument crystalReport = new ReportDocument(); // creating object of crystal report
            crystalReport.Load(Server.MapPath("~/CrystalPersonInfo.rpt")); // path of report 
            crystalReport.SetDataSource(datatable); // binding datatable
            CrystalReportViewer1.ReportSource = crystalReport;
        }

How It Works

On button click we are going to Export crystal report in pdf, Excel, html, format.

We are bringing all data from sql server into dataset and binding dataset to crystal report data source.

Creating object of report document

ReportDocument crystalReport = new ReportDocument();

After creating object we are going to load crystal report by giving its path.

crystalReport.Load(Server.MapPath("~/CrystalPersonInfo.rpt"));

Here we are assigning format to export.

crystalReport.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, 
    Response, true, "PersonDetails");

First Button (Img1 for exporting records in PDF format)

On button click we are going to Export crystal report in PDF format.

C#
protected void Img1_Click(object sender, ImageClickEventArgs e)
        {
            SqlCommand cmd = new SqlCommand("Usp_getPersonRecords", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            DataTable datatable = new DataTable();
            da.Fill(datatable); // getting value according to imageID and fill dataset

            ReportDocument crystalReport = new ReportDocument(); // creating object of crystal report
            crystalReport.Load(Server.MapPath("~/CrystalPersonInfo.rpt")); // path of report 
            crystalReport.SetDataSource(datatable); // binding datatable
            CrystalReportViewer1.ReportSource = crystalReport;

            crystalReport.ExportToHttpResponse
            (CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, true, "PersonDetails");
            //here i have use [ CrystalDecisions.Shared.ExportFormatType.PortableDocFormat ] to Export in PDF

        }

First Second (Img2 for exporting records in Excel format)

On button click we are going to Export crystal report in Excel format.

C#
protected void img2_Click(object sender, ImageClickEventArgs e)
        {
            SqlCommand cmd = new SqlCommand("Usp_getPersonRecords", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            DataTable datatable = new DataTable();
            da.Fill(datatable); // getting value according to imageID and fill dataset

            ReportDocument crystalReport = new ReportDocument(); // creating object of crystal report
            crystalReport.Load(Server.MapPath("~/CrystalPersonInfo.rpt")); // path of report 
            crystalReport.SetDataSource(datatable); // binding datatable
            CrystalReportViewer1.ReportSource = crystalReport;

            crystalReport.ExportToHttpResponse
            (CrystalDecisions.Shared.ExportFormatType.ExcelRecord, Response, true, "PersonDetails");
            //here i have use [ CrystalDecisions.Shared.ExportFormatType.ExcelRecord ] to Export in Excel
        }

First Third (Img3 for exporting records in Word format)

On button click we are going to Export crystal report in Word format

C#
protected void img3_Click(object sender, ImageClickEventArgs e)
        {
            SqlCommand cmd = new SqlCommand("Usp_getPersonRecords", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            DataTable datatable = new DataTable();
            da.Fill(datatable); // getting value according to imageID and fill dataset

            ReportDocument crystalReport = new ReportDocument(); // creating object of crystal report
            crystalReport.Load(Server.MapPath("~/CrystalPersonInfo.rpt")); // path of report 
            crystalReport.SetDataSource(datatable); // binding datatable
            CrystalReportViewer1.ReportSource = crystalReport;

            crystalReport.ExportToHttpResponse
            (CrystalDecisions.Shared.ExportFormatType.WordForWindows, Response, true, "PersonDetails");
            //here i have use [ CrystalDecisions.Shared.ExportFormatType.WordForWindows ] to Export in Word
        }

Now save and run project.  

All records will appear on Crystal report.

With five buttons to Export.

Image 23 

On clicking of PDF button.

Image 24 

On clicking Excel button.

Image 25

On clicking of Word button.

Image 26

 

On clicking of HTML button.

Image 27 

On clicking of RTF button

Image 28 

Making Easy to Understand

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Technical Lead
India India
Microsoft Most Valuable Professional
Code Project Most Valuable Author
C# Corner Most Valuable Professional

I am Senior Technical lead Working on.Net Web Technology
ASP.NET MVC,.Net Core,ASP.NET CORE, C#, SQL Server, MYSQL, MongoDB, Windows

Comments and Discussions

 
QuestionWhat about Parameters? Pin
Liefie200013-May-14 5:03
Liefie200013-May-14 5:03 
AnswerRe: What about Parameters? Pin
Saineshwar Bageri13-May-14 6:14
Saineshwar Bageri13-May-14 6:14 
GeneralRe: What about Parameters? Pin
Liefie200013-May-14 6:19
Liefie200013-May-14 6:19 
GeneralRe: What about Parameters? Pin
Liefie200013-May-14 9:16
Liefie200013-May-14 9:16 
GeneralRe: What about Parameters? Pin
Saineshwar Bageri13-May-14 19:00
Saineshwar Bageri13-May-14 19:00 
AnswerMessage Closed Pin
26-Jun-14 20:01
robertgalp26-Jun-14 20:01 
QuestionHow to use the data source with subreports Pin
sukeshchand23-Mar-14 21:29
professionalsukeshchand23-Mar-14 21:29 
AnswerRe: How to use the data source with subreports Pin
Saineshwar Bageri23-Mar-14 23:01
Saineshwar Bageri23-Mar-14 23:01 
here is sample Check this one will help you.

protected void SubReport1Load()
{

MainCrystalReport Mainreport = new MainCrystalReport();

SqlConnection con = new SqlConnection(@"Data Source=YourServerName;Initial Catalog=YourDatabaseName;Uid=SQLUserID;Pwd=PasswordforUser");
con.Open();

SqlDataAdapter da = new SqlDataAdapter(@"Your Query", con);

DataSet1 ds = new DataSet1();

da.Fill(ds.Tables[0]);

Mainreport.Subreports[0].SetDataSource(ds.Tables[0]);


}
GeneralRe: How to use the data source with subreports Pin
sukeshchand25-Mar-14 7:16
professionalsukeshchand25-Mar-14 7:16 
GeneralRe: How to use the data source with subreports Pin
Saineshwar Bageri25-Mar-14 17:59
Saineshwar Bageri25-Mar-14 17:59 
AnswerRe: How to use the data source with subreports Pin
Saineshwar Bageri23-Mar-14 23:04
Saineshwar Bageri23-Mar-14 23:04 
QuestionHow to get page headers exporting to html format Pin
Member 1067834819-Mar-14 3:06
Member 1067834819-Mar-14 3:06 
AnswerRe: How to get page headers exporting to html format Pin
Member 106783484-Aug-14 20:06
Member 106783484-Aug-14 20:06 
Questionabout using this with unicode characters Pin
pratt133226-Feb-14 7:55
pratt133226-Feb-14 7:55 
AnswerRe: about using this with unicode characters Pin
Saineshwar Bageri26-Feb-14 19:11
Saineshwar Bageri26-Feb-14 19:11 
AnswerRe: about using this with unicode characters Pin
Saineshwar Bageri25-Mar-14 18:01
Saineshwar Bageri25-Mar-14 18:01 
GeneralMy vote of 5 Pin
Humayun Kabir Mamun27-Jan-14 19:53
Humayun Kabir Mamun27-Jan-14 19:53 
GeneralRe: My vote of 5 Pin
Saineshwar Bageri13-Feb-14 20:48
Saineshwar Bageri13-Feb-14 20:48 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.