Now that you have built the report you can build a web page
to display it. I will create a simple page that lets the user enter a fiscal
year and view the report.
1.
Right click on the Adventure Works web site in the Solution Explorer.
2.
Select Add New Item… from the pop-up menu.
3.
Select Web Form from the templates and change the name to
SalesReport.aspx. Make sure the Language is set to C# and click the Add button.
4.
Open the page and view its markup. Add the following Register directive
after the Page directive.
Listing 4
<%@ Register assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral,
PublicKeyToken=692fbea5521e1304" namespace="CrystalDecisions.Web" tagprefix="CR"%>
This allows you to use the Crystal Reports Viewer control
that comes with Visual Studio.
5.
Add the following code between the div tags.
Listing 5
<asp:TextBox runat="server" ID="txtFiscalYear"></asp:TextBox>
<asp:Button ID="btnPreview" runat="server" onclick="btnPreview_Click"
Text="Preview" />
<br />
<br />
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server"
AutoDataBind="true" />
This adds a text box that will allow the user to enter the
fiscal year to print the report.
6.
Add the following using statements in the code behind.
Listing 6
//Custom using statements
using System.Data.SqlClient;
using System.Configuration;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
7.
Add the following code the Page_Load event.
Listing 7
if (IsPostBack)
{
if (CrystalReportViewer1.Visible == true)
{
//Rebind the report.
BindReport();
}
}
8.
Add the following code for the Preview button's click event. You can
create the event handler by double clicking on the button in Design mode.
Listing 8
protected void btnPreview_Click(object sender, EventArgs e)
{
BindReport();
CrystalReportViewer1.Visible = true;
}
This code calls a custom method called BindReport() and then
shows the Crystal Report Viewer Control.
9.
Now add the following custom methods.
Listing 9
private void BindReport()
{
ReportDocument report = new ReportDocument();
report.Load(Server.MapPath("Sales.rpt"));
SetTableLocation(report.Database.Tables);
report.DataDefinition.FormulaFields["FiscalYear"].Text = txtFiscalYear.Text;
CrystalReportViewer1.ReportSource = report;
}
private void SetTableLocation(Tables tables)
{
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = @"LTMTI30\SQL2008";
connectionInfo.DatabaseName = "AdventureWorks";
connectionInfo.UserID = "aspalliance";
connectionInfo.Password = "aspalliance";
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
TableLogOnInfo tableLogOnInfo = table.LogOnInfo;
tableLogOnInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(tableLogOnInfo);
}
}
The first method creates an instance of the ReportDocument
class. This represents the report that you created earlier and allows you to
manipulate it at runtime. The SetTableLocation() method sets the table location
for each table in the report. Again, this assumes you have created an "aspalliance"
SQL Login and have given it access to the database. The FiscalYear formula is
then set to the year the user typed into the report. You could add validation
to make sure the user entered a four digit year, but for simplicity I left this
out. The Crystal Report Viewer's source is then set to the report object.
You can now run the project. Set the SalesReport.aspx page
to the start page and run the project. Enter 2002 for the Fiscal Year and click
the Preview button.
Figure 13

You can scroll through the report using the navigation
buttons at the top of the page or you can click directly to a sales territory
by clicking the name in the group tree on the left hand side of the report.