ReportService クラスは、Silverlight のレポートビューアのための WCF
サービスの実装を格納する PerpetuumSoft.Reporting.Silverlight.Server.ReportServiceBase
クラスを拡張します。
手順4. レポートテンプレートを作成します。
まず、データソースの構造を作成します。デザイナでサービスを開きます。それには、ReportService.svc.cs
を右クリックし、ポップアップメニューから「デザイナーの表示」を選択します。

ReportService
クラスの OnLoadData
オーバーライドメソッドを使用して、データソースに値を設定してください。
protected override void
OnLoadData(IDictionary<string, object> parameters, string reportName,
PerpetuumSoft.Reporting.Components.ReportSlot reportSlot)
{
base.OnLoadData(parameters, reportName,
reportSlot);
DataRow row =
customers.NewRow();
row["Name"] = "Johnson Leslie";
row["Phone"] = "613-442-7654";
customers.Rows.Add(row);
row =
customers.NewRow();
row["Name"] = "Fisher Pete";
row["Phone"] = "401-609-7623";
customers.Rows.Add(row);
row =
customers.NewRow();
row["Name"] = "Brown Kelly";
row["Phone"] = "803-438-2771";
customers.Rows.Add(row);
}
[ VB.NET の場合 ]
Protected Override Sub
OnLoadData(ByVal parameters
As
System.Collections.Generic.IDictionary(Of String, Object),
ByVal reportName
As String,
ByVal reportSlot
As PerpetuumSoft.Reporting.Components.
ReportSlot)
MyBase.OnLoadData(parameters, reportName, reportSlot)
Dim row As
DataRow = customers.NewRow()
row("Name") = "Johnson Leslie"
row("Phone"] = "613-442-7654"
customers.Rows.Add(row)
row = customers.NewRow()
row("Name") = "Fisher Pete"
row("Phone") = "401-609-7623"
customers.Rows.Add(row)
row = customers.NewRow()
row("Name") = "Brown Kelly"
row("Phone") = "803-438-2771"
customers.Rows.Add(row)
End Sub
備考:問い合わせた(クエリされた)ドキュメント情報とそのパラメータは、OnLoadData
メソッドのパラメータに渡されます。
では、ReportManager
コンポーネントを追加します(ツールボックスで ReportManager
をダブルクリックします)。このコンポーネントはレポート生成を行います。

その後、ReportManager のノード (reportManager1)
がデザイナに表示されます。

ReportService サービスの ReportManager プロパティを設定します。
それには、プロパティ ウィンドウから ReportService のプロパティを開きます。

プロパティ一覧から reportManager1 を選択します。

では、レポートを作成します。
reportManager1
を右クリックして「エディタの起動」を選択してレポートマネージャのエディタを起動します。

レポートテンプレートを作成する前に、レポートを生成するデータソースを追加します。
「データソース」タブのデータバインドリストに 「Customers」
テーブルを追加します(「追加」ボタンをクリックし、「オブジェクト名の編集」の「名称」の値を
Customers に、「値」にはコンボボックスから dataSet1.Customers
を選択します)。


「レポート」タブで新しいオブジェクトを追加します(「追加」ボタンをクリックして
InlineReportSlot を追加します)。

ReportName プロパティの値を CustomersReport
に設定します。以後、レポートマネージャからドキュメントをこの名前で取得します。次に、「デザイナの起動」を押してレポートデザイナを立ち上げます。

[ファイル] ->[新規]メニューを選択すると、下図の画面に表示されているフォームが表示されます。

「新規」タブのリストから「標準のレポート」を選択し、「OK」 ボタンを押します。

画面に、「スタンダード ウィザード」ウィンドウが表示されます。
ドキュメントのパラメータを下図のように設定します。

「追加」(
)ボタンを使ってデータソースを追加します。

ボタンをクリックし、表示されたツリービューから Customers をダブルクリックして選択します。

レポートに出力したいフィールドを選択します(フィールドの 「Name」 と 「Phone」
の両方を移動できるはずです)。

OK ボタンを押すと、テンプレートが作成されます。

では、テンプレートを保存してデザイナを閉じてください。
手順5. Silverlight の
ReportViewer コンポーネントの追加と設定
レポートを表示するために、Silverlight アプリケーションにレポートビューア
コンポーネントを追加します。それには、ReportViewer を格納している PerpetuumSoft.Reporting.Silverlight.Client
アセンブリの参照を追加してください(ソリューションエクスプローラの SampleApplication
の参照設定を右クリックし、ポップアップメニューから「参照の追加」を選択してください)。


System.Windows.Controls.Toolkit.dll
アセンブリの参照も追加します。

デザイナで MainPage.xaml を開き、PerpetuumSoft.Reporting.Silverlight.Client
アセンブリの "rss" xml 名前空間を追加します。

次に、Grid セクションに ReportViewer コンポーネントを追加します。
<rss:ReportViewer
x:Name="ReportViewer1"
ServiceUrl="http://localhost:5555/ReportService.svc"
ReportName="CustomersReport"/>
変更した後、UserControl セクションは次のようになるはずです。
<UserControl
x:Class="SilverlightApplication.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:rss="clr-namespace:PerpetuumSoft.Reporting.Silverlight.Client;assembly=PerpetuumSoft.Reporting.Silverlight.Client"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid
x:Name="LayoutRoot"
Background="White">
<rss:ReportViewer
x:Name="ReportViewer1"
ReportName="CustomersReport"
ServiceUrl="http://localhost:5555/ReportService.svc"/>
</Grid>
</UserControl>
MainPage
のソースコードを開いて、コード行を次のように変更/追加します。
[ C# の場合 ]
public
partial class MainPage : UserControl
{
public
MainPage()
{
InitializeComponent();
Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void
MainPage_Loaded(object sender, RoutedEventArgs e)
{
ReportViewer1.RenderDocument();
}
}
[ VB.NET の場合 ]
Pertical Public Class
MainPage
Inherits
UserControl
Public Sub New()
InitializeComponent()
AddHandler Loaded,
Address Of MainPage_Loaded
End Sub
Sub
MainPage_Loaded(ByVal sender
As Object,
ByVal e
As
RoutedEventArgs)
ReportViewer1.RenderDocument()
End Sub
End Class
備考:
RenderDocument()
の呼び出しは、サーバーにある現在のレポートの生成し、レポートビューアに表示します。
手順6. アプリケーションの起動
SampleApplication.Web アプリケーションをスタートアップ
プロジェクトに設定します。それには、SampleApplication.Web
を右クリックし、ポップアップメニューから「スタートアップ プロジェクトに設定」を選択します。

Visual Studio のメインツールバーにある「デバッグ開始」(
ボタン)をクリックしてアプリケーションを実行します。

終わりに
一般的な手順を踏んで、シンプルでかなり操作可能なアプリケーションができました。コードをたくさん記述する必要はなく、既存の実装を使用しただけです。大半はそれで十分です。Report
Sharp Shooter for Silverlight
の多数の動作面だけでなく、レポートビューアの外観も変更できるので、必要に応じてデフォルトの動作を大幅に変えることができます。