Beruflich Dokumente
Kultur Dokumente
I'm going very quickly and deeply into the integration of .aspx pages with reporting services reports. If
you are new to reporting services this is not an article for you. I will show you how to integrate reports
into .aspx pages and alter the content of the reports with web server controls such as drop down boxes
and calendars. I take for granted you have a developer machine setup with SQL Server developer edition,
Visual Studio .NET, and Reporting Services installed on your client with online samples and books installed
as well. I will also not get into designing reports and placing them on your Report Server.
In the samples that are bunged with Microsoft reporting services there is a Report Viewer, this is supplied
in VB as well as in C#. I will be concentrating on the C# version. The Report Viewer will allow you to
display reports inline with other controls and HTML on a .aspx page.
You can add this as a sub project to your solution or compile the project to a DLL and add that as a
reference to your new reporting project. We will do the latter and add the compiled DLL to our new
project.
Visual Studio has now created a few more directories including a bin directory with a debug version of
ReportViewer.dll (you can change the build type to produce a release version if you want).
Now you can add ReportViewer.dll to this your web project and view reporting:
1. Copy the ReportViewer.dll into your bin directory or your web project.
2. In Solution Explorer: Right-Click references, Add a reference, Projects TAB, browse and select
ReportViewer.dll in your bin directory.
3. Now add a ReportViewer document to the toolbox: Right Click Toolbox, Add Remove Items, Browse
to bin directory and select ReportViewer.dll.
This is the real easy bit, drag ReportViewer from the Toolbox onto your webpage:
So, now we have to tell ReportView where to find a report. Right click to see the properties of the
ReportViewer:
As can be seen above, I've set ServerUrl and the ReportPath. This will show the report as shown on the
default webpage for reporting server except that it's encapsulated into a ASP.NET web page. Unless you
specify a report ServerURL and ReportPath the component does not let you alter the size and height of
the report on the web page.
Useful parameters
Top Tip: Store the ServerURL in web.config application key so that it can be used throughout your
application. System administrators have a habit of changing the backend servers.
web.config
<appSettings>t;
<add key="Key_ReportServer"
value="http://myServer/reportserver"/>
</appSettings>
C# code
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
ReportViewer1.ServerUrl =
(ConfigurationSettings.AppSettings["Key_ReportServer"]);
}
Some reports take parameters and you detail what information is to be displayed by the start date, year,
end date etc. I generally use SQL Server stored procedures to drive reports as I can change the backend
SQL logic without the hassle of uploading and changing the report.
Below is a very simple stored procedure used to get the Order Qty (number of orders) over a set year.
The SQL is included for reference:
I have put this in a simple report that displays a table by Month and Year with a Qty value. I also placed a
chart on the report to show the quantity of sales by month. I have uploaded Report5.rdl to my Reporting
Services server called in a test directory. Note that when the report is created by using the above stored
procedure it will pull the parameter @Year as a report parameter automatically.
There are two ways I could view the report on the web page: Enter report details into parameters as
shown above or use the code to tell the ReportViewer component where to find the report. Since we're all
programmers I will use the code.
Specify the Parameters of the Report component what the ServerUrl and the ReportPath are and the
report will appear on the screen on build on browse. You still have to enter a year into the Parameter field
just like going to reporting services directly; which is a bit crude for users, the toolbar is visible we will
turn those off so that they are hidden from the user.
ReportViewer1.Toolbar =
Microsoft.Samples.ReportingServices.ReportViewer.multiState.False;
ReportViewer1.Parameters =
Microsoft.Samples.ReportingServices.ReportViewer.multiState.False;
Top Tip: You have a single ReportViewer component that can be used to display more than one report.
By placing a drop down list onto the web page and setting three variables (2002, 2003, 2004) we can use
this to drive the Report parameter. You will have to ensure that autopostback is enabled on the drop list
control.
A more complex example is here pulling the date info from a calendar control and a drop down:
string ReportPath = "/Reports/Invoice";
string param = "&Year=" + yearint + "&Month=" + monthint
+ "&Day=" + dayint +
"&Cust=" Drop_Cust.SelectedValue;
ReportViewer1.ReportPath = ReportPath + param ;
You can also place a web control button on your page to toggle the toolbar on and off.
Page view
Complete code
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Configuration;
namespace ReportWeb
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DropDownList DropDownList1;
protected System.Web.UI.WebControls.Button Button1;
protected Microsoft.Samples.ReportingServices.ReportViewer ReportViewer1;
if (!IsPostBack)
{
string param = "&Year=" + DropDownList1.SelectedValue;
ReportViewer1.ReportPath = "/test/Report5" + param ;
ReportViewer1.ServerUrl =
(ConfigurationSettings.AppSettings["Key_ReportServer"]);
ReportViewer1.Toolbar =
Microsoft.Samples.ReportingServices.ReportViewer.multiState.False;
ReportViewer1.Parameters =
Microsoft.Samples.ReportingServices.ReportViewer.multiState.False;
}
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.DropDownList1.SelectedIndexChanged +=
new System.EventHandler(this.DropDownList1_SelectedIndexChanged);
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
History