Crete a new project:
Add a aspx Master Page
Create a new folder Reports and 2 sub folder crystal &
crystalviewer
Now add a web form page in crystalviewer folder.
Add the master page namespace in your web form page.
MasterPageFile="~/Views/Shared/ReportSite.Master"
Replace your web form by this code
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
</asp:Content>
Now go to design mode of your web form drag & drop the
crystal report viewer in your web form.
After that your page will be look look like this.
Replace the code:
<CR:CrystalReportViewer ID="EmployeeList" runat="server" HasCrystalLogo="False"
AutoDataBind="True" Height="50px" EnableParameterPrompt="false" EnableDatabaseLogonPrompt="false" ToolPanelWidth="200px"
Width="350px" ToolPanelView="None" />
I am also add a preview button if you need you can add more
control as you need.
Right click the field expert field then select the database
(I will use store procedure)
Select your store procedure.
Add the namespace in your web form cs file
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
replace the code in your button event
public string thisConnectionString = ConfigurationManager.ConnectionStrings["ConnectionStringOther"].ConnectionString;
CrystalDecisions.CrystalReports.Engine.ReportDocument
reportDocument = null;
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
LoadReport();
}
}
protected void Preview_Click(object sender, EventArgs e)
{
LoadReport();
}
private void LoadReport()
{
if (this.reportDocument != null)
{
this.reportDocument.Close();
this.reportDocument.Dispose();
}
SqlConnectionStringBuilder SConn = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnectionStringOther"].ConnectionString);
SqlConnection thisConnection = new SqlConnection(thisConnectionString);
// store
procedure
SqlCommand mySelectCommand = new System.Data.SqlClient.SqlCommand("PIS_GetAllEmployeeInfo", thisConnection);
mySelectCommand.CommandType = CommandType.StoredProcedure;
reportDocument = new ReportDocument();
//Report
path
string reportPath = Server.MapPath("~/Report/Crystal/EmployeeListCrystalReport.rpt");
reportDocument.Load(reportPath);
//
Report connection
ConnectionInfo connInfo = new ConnectionInfo();
connInfo.ServerName =
SConn.DataSource;
connInfo.DatabaseName =
SConn.InitialCatalog;
connInfo.UserID = SConn.UserID;
connInfo.Password = SConn.Password;
TableLogOnInfo tableLogOnInfo = new TableLogOnInfo();
tableLogOnInfo.ConnectionInfo =
connInfo;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in
reportDocument.Database.Tables)
{
table.ApplyLogOnInfo(tableLogOnInfo);
table.LogOnInfo.ConnectionInfo.ServerName = connInfo.ServerName;
table.LogOnInfo.ConnectionInfo.DatabaseName = connInfo.DatabaseName;
table.LogOnInfo.ConnectionInfo.UserID = connInfo.UserID;
table.LogOnInfo.ConnectionInfo.Password = connInfo.Password;
table.Location = "dbo." +
table.Location;
}
// You
can pass parameter in your store procedure if you need
//reportDocument.SetParameterValue("@FromDate",
ProjectUtilities.ConvertToDate(txtFromDate.Text));
//reportDocument.SetParameterValue("@ToDate",
ProjectUtilities.ConvertToDate(txtToDate.Text));
EmployeeListCrystalReport.ReportSource = reportDocument;
EmployeeListCrystalReport.DataBind();
}
Add the connection string in you web config file.
Add a new class name ReportViewerViewModel in your model
folder
public class ReportViewerViewModel
{
public string ReportPath { get; set; }
}
Add a report controller & define action
public class ReportController : Controller
{
//
// GET:
/Report/
public ActionResult EmployeeListReport()
{
ReportViewerViewModel model = new ReportViewerViewModel();
string content = Url.Content("~/Report/ReportViewer/EmployeeListReport.aspx");
model.ReportPath = content;
return View("ReportViewer", model);
}
}
Add a Reportviewer
viewer & replace the code
@{
ViewBag.Title = "ReportViewer";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@model
MvcApplicationCrystalReport.Models.ReportViewerViewModel
<iframe src="@Model.ReportPath" style="width:100%; height:1000px; border:none;"></iframe>
Your report will not view, you need to add a folder aspnet_client in which there will be crystalreportviewers13 folder of your crystal report set up.
Now preview you will see your report.
You can download the code sample
Comments
Post a Comment