2015年9月11日金曜日

ReportViewer の LocalReport を利用する(2)

前のコンテンツの続きです。

今回は Report Builder で作成した rdl ファイル(サーバー用レポートファイル)を編集し、ローカルレポートとして扱えるようにします。

サーバー用の rdl ファイルと、ローカル用の rdlc ファイル。拡張子が違いますが、その内部はどちらも SQL Server Reporting Service の機能を利用しているために、殆どが同一の記述となる XML ファイルです。

Visual Studio 上で作成した場合は、最初から rdlc ファイルとして作成できるのでこの作業は不要ですが、Report Builder 等のサーバー用ファイルを作成するツールの場合、以下の変換作業を行う必要があります。

変換する必要があるのは 2 箇所です。データソースについてと、データセットについての箇所を変更することになります。

   1: <DataSources>
   2:   <DataSource Name="DataSource1">
   3:     <rd:SecurityType>None</rd:SecurityType>
   4:     <rd:DataSourceID>02ac4784-febf-4de8-a38b-e07c20d83339</rd:DataSourceID>
   5:   </DataSource>
   6: </DataSources>
   7: <DataSets>
   8:   <DataSet Name="DataSet1">
   9:     <Query>
  10:       <DataSourceName>DataSource1</DataSourceName>
  11:       <CommandText />
  12:     </Query>
  13:     <Fields>
  14:       <Field Name="Field01">
  15:         <DataField>DB_Field01</DataField>
  16:         <rd:UserDefined>true</rd:UserDefined>
  17:       </Field>
  18:       <Field Name="Field02">
  19:         <DataField>DB_Field02</DataField>
  20:         <rd:UserDefined>true</rd:UserDefined>
  21:       </Field>
  22:     </Fields>
  23:   </DataSet>
  24: </DataSets>

作成されたばかりの rdl ファイルにおける、データソースとデータセットの記述が XML の最初の方にあります。作成した内容にもよりますが、大体はこのような形です。

データソースの箇所は次のように修正します。

   1: <DataSource Name="DataSource1">
   2:   <ConnectionProperties>
   3:     <DataProvider>System.Data.DataSet</DataProvider>
   4:     <ConnectString>/* Local Connection */</ConnectString>
   5:   </ConnectionProperties>
   6:   <rd:DataSourceID>02ac4784-febf-4de8-a38b-e07c20d83339</rd:DataSourceID>
   7: </DataSource>

バインドしたデータを参照するためのプロバイダクラスを指定します。今回のサンプルでは DataTable の値を扱うように考えていますので、System.Data.DataSet を記載します。
ConnectionString にはコメントしか記載していないですが、要素としては必要に見られている「かもしれない」のでこのように記載しています(多分、なくても問題ないとは思います…)

   1: <DataSets>
   2:   <DataSet Name="DataSet1">
   3:     <Query>
   4:       <DataSourceName>DataSource1</DataSourceName>
   5:       <CommandText>/* Local Query */</CommandText>
   6:     </Query>
   7:     <Fields>
   8:       <Field Name="Field01">
   9:         <DataField>DB_Field01</DataField>
  10:         <rd:TypeName>System.String</rd:TypeName>
  11:       </Field>
  12:       <Field Name="Field02">
  13:         <DataField>DB_Field02</DataField>
  14:         <rd:TypeName>System.String</rd:TypeName>
  15:       </Field>
  16:     </Fields>
  17:   </DataSet>
  18: </DataSets>

続いてデータセットの部分です。こちらでは利用するデータソースに対しての記述と、扱うフィールドについて、それぞれを修正します。

Query の CommandText、rdl では空要素となっていたので、これもわざわざ値をコメントとして追加しなくても良い気もします……。

フィールド部では、各フィールドの型を追記します。ここで指定したタイプによって、帳票上での扱われ方が異なる点がありますので注意が必要です(Null の場合など)。

これだけの修正で、作成した rdl ファイルを rdlc ファイルとして利用することが可能です。

0 件のコメント:

コメントを投稿