Introduction
In this post, I explain how to use Crystal Report in MVC4.In one of my previous article I have shown you how to use Microsoft report in asp.net MVC, Today I show you a very easy way to use Crystal Report with MVC.
It is very easy to create crystal reports in asp.net web form application, but in MVC it's a little bit difficult since MVC does not have any server side controls and events. Today I show you a very easy way to use Crystal Report with MVC.
Prerequisite
I used followings:- .Net framework 4.0
- Entity Framework
- SQLServer 2008
Steps :
Just follow the steps and get result easily.Step - 1 : Create New Project
Go to File > New > Project > Select asp.net mvc4 web application > Entry Application Name > Click OK.Step-2: Add a Database.
Go to Solution Explorer > Right Click on App_Data folder > Add > New item > Select SQL Server Database Under Data > Enter Database name > Add.Step-3: Create table and insert data for show in report
Open Database > Right Click on Table > Add New Table > Add Columns > Save > Enter table name > Ok.Step-4: Add Entity Data Model.
Go to Solution Explorer > Right Click on Project name form Solution Explorer > Add > New item > Select ADO.net Entity Data Model under data > Enter model name > Add.A popup window will come (Entity Data Model Wizard) > Select Generate from database > Next >
Chose your data connection > select your database > next > Select tables > enter Model Namespace > Finish.
Step-5: Add Action for populate data.
Go To Controller > Add your action > write the following code and Rebuild your application to get data from Database.I have used HomeController Here.
public ActionResult ReportsEverest() { List allEverest = new List(); using (MyDatabaseEntities dc = new MyDatabaseEntities()) { allEverest = dc.Everests.ToList(); } return View(allEverest); }
Step-6: Add View for show data on a page.
Right Click on your Action > Add View > Enter View name > Check Create a strongly-type view > Select your model class > Select Scaffold templete > Select list > Add.View Html Code
@model IEnumerable<MVCCrystalReport.Everest> @{ViewBag.Title = "ReportsEverest";} <h2>ReportsEverest</h2><p> @Html.ActionLink("Create New", "Create") </p> <div><a href="@Url.Action("ExportReport")"> Get Report in PDF</a></div> <table border="0" cellpadding="0" cellspacing="10"> <tr> <th> @Html.DisplayNameFor(model => model.Mountain) </th> <th> @Html.DisplayNameFor(model => model.HeightInMeter) </th> <th> @Html.DisplayNameFor(model => model.HeightInFeet) </th> <th> @Html.DisplayNameFor(model => model.ProminenceInMeter) </th> <th> @Html.DisplayNameFor(model => model.ParentMount) </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Mountain) </td> <td> @Html.DisplayFor(modelItem => item.HeightInMeter) </td> <td> @Html.DisplayFor(modelItem => item.HeightInFeet) </td> <td> @Html.DisplayFor(modelItem => item.ProminenceInMeter) </td> <td> @Html.DisplayFor(modelItem => item.ParentMount) </td> <td> </td> </tr> } </table>
Run Application.
Look Result show in your browser.
Here I have added below the line for Getting Exported PDF File.
<a href="@Url.Action("ExportReport")"> Get Report in PDF</a>
Step-7: Add Report file(.rpt) and Design your report.
Add "Reports" folder to your projectRight Click on "Reports" folder > Add > New item > Select Report under Reporing (Crystal Report file) > Enter report file name > Add.
Here we also have to add Datasource for our report.
Right Click On "Database Fields" under Fields Explorer > Database Expert > Project Data > .NET Objects > Select your Object > Click on simble ">>" > Ok.
Now Design your Report looks.
Here I have designed my Report Like this....
Step-9: Add Action for generating PDF File for Report Data
Go To Controller > Add your action > write the following code and Rebuild your application to get data from Database.public ActionResult ExportReport() { List allEverest = new List(); using (MyDatabaseEntities dc = new MyDatabaseEntities()) { allEverest = dc.Everests.ToList(); } ReportDocument rd = new ReportDocument(); rd.Load(Path.Combine(Server.MapPath("~/Reports"), "rpt_EverestList.rpt")); rd.SetDataSource(allEverest); Response.Buffer = false; Response.ClearContent(); Response.ClearHeaders(); try { Stream stream = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); stream.Seek(0, SeekOrigin.Begin); return File(stream, "application/pdf", "EverestList.pdf"); } catch (Exception ex) { throw; } }