Database
Here I am making use of Microsoft’s Northwind Database. You can download it from here.
Creating an Entity Data Model
Following is the Entity Data Model of the Customers Table of the Northwind Database which will be used later in this project.
Controller
The Controller consists of following Action methods.
Action method for handling GET operation
The Entity Framework is now configured and hence now we can create a Controller and write code to fetch the records from the Customers Table of the Northwind Database.
Inside the Index Action method, the Top 10 Customer records are fetched and returned to the View.
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
NorthwindEntities entities = new NorthwindEntities();
return View(from customer in entities.Customers.Take(10)
select customer);
}
}
View
Now you will need to Right Click inside the Controller class and click on the Add View option in order to create a View for the Controller.
The Name of the View is set to Index, the Template option is set to Empty, the Model class is set to Customer Entity (the one we have generated using Entity Framework) and finally the Data context class is set to NorthwindEntities.
Inside the View, in the very first line the Customer Entity is declared as IEnumerable which specifies that it will be available as a Collection.
For displaying the records, an
HTML Table is used. A loop will be executed over the Model which will generate the
HTML Table rows with the Customer records.
There is an
HTML Anchor Link which redirects the User to the
Reports.aspx (Web Form page discussed later) used for displaying the
Crystal Report.
@model IEnumerable<Crystal_Reports_MVC.Customer>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<h4>Customers</h4>
<hr />
<table cellpadding="0" cellspacing="0">
<tr>
<th>CustomerID</th>
<th>ContactName</th>
<th>City</th>
<th>Country</th>
</tr>
@foreach (Customer customer in Model)
{
<tr>
<td>@customer.CustomerID</td>
<td>@customer.ContactName</td>
<td>@customer.City</td>
<td>@customer.Country</td>
</tr>
}
</table>
<br />
<a href="~/Reports/Report.aspx">View Report</a>
</body>
</html>
Configuring Crystal Report in ASP.Net MVC
1. The very first step is to right click the Project in the Solution Explorer and click Add and then Crystal Reports.
2. The above action will open the following dialog where you will need to set a name for the Crystal Report.
3. In this dialog, you need to select the Using the Report Wizard option.
4. Once you press
OK in the above dialog, the
Report Wizard starts and you get the following dialog where you need to choose the type of Database connection for your
Crystal Report. Since here we are using
Entity Framework, you will need to choose the
Customers Entity Framework Data Model.
5. Next the
dialog will ask for the Columns or Fields from the Customer
DataSet you need to display on the
Crystal Reports. You can choose either all or specific fields as per you choice.
Note: There are more steps in the Wizards but those are Optional hence are not included in this article.
Once you click Finish button, your Crystal Report should look as below.
6. Crystal Report works only with a
Crystal Report Viewer control which is available only in
ASP.Net Web Forms and hence for displaying a
Crystal Report, you will need to add a Web Forms page.
7. Now in the
ASP.Net Web Forms page, you will need to add a
Crystal Report Viewer control from the
ToolBox.
HTML Markup
<%@Page Language="C#" AutoEventWireup="true" CodeBehind="Report.aspx.cs" Inherits="Entity_Framework_MVC.Reports.Report" %>
<%@Register Assembly="CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" Namespace="CrystalDecisions.Web" TagPrefix="CR" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" Height="400" Width="600" />
</form>
</body>
</html>
Populating the Crystal Report using Entity Framework
Inside the
Page Load event, the Crystal Report is populated with the records of the database using
Entity Framework.
protected void Page_Load(object sender, EventArgs e)
{
CrystalReportViewer1.ToolPanelView = CrystalDecisions.Web.ToolPanelViewType.None;
CustomerReport crystalReport = new CustomerReport();
NorthwindEntities entities = new NorthwindEntities();
crystalReport.SetDataSource(from customer in entities.Customers.Take(10)
select customer);
CrystalReportViewer1.ReportSource = crystalReport;
CrystalReportViewer1.RefreshReport();
}
Screenshots
HTML Grid displaying Entity Framework records
Crystal Report displaying Entity Framework records
Error
In case the Crystal Report is not displaying and also you could get a JavaScript error.
Downloads