NetAdvantage Reporting に関する備忘録


プロジェクトで NetAdvantage Reporting を使った帳票を開発中ですが、後で絶対忘れそうなので備忘録としてざっと纏めてみました。チュートリアルじゃなくあくまで自分用の備忘録ですが、NetAdvantage Reporting の情報はネット上まだ少ないようなので、なんかのお役に立てれば幸いです。


・ レポートの余白は Margins プロパティで設定できる。



・ レポートデータエクスプローラーで複数のデータソースを追加できる。ネストしない複数のテーブルを一つの帳票で表示したい場合、「データーソース」を複数設定すればいい。*1



・ 「データーソース」を右クリック、「データーソースの追加」→「オブジェクトデータソース」→「データを返すクラスの選択」でクラスを選択、IEnumerable の戻り値を返すメソッドもしくはプロパティを選択できる。




・ 「レポートデータエクスプローラー」でデータソースを選択し、ボディにドラッグドロップすると、簡単にテーブルを設定できる。



・ 各フィールドの幅を設定するプロパティは現時点プロパティウィンドウには見当たらず、マウスを操作してちくちく幅を設定するしかなさそう。



・ テーブルは DataSourceName プロパティでバインドしたいデータソースを変更できる。



・ ラベルに表示したいフィールドは、Infragistics.Reports.Label.Text に = Fields.OrderCode 等と記述することで設定できる。



・ 本日の日付を表示したい場合は、「式アシスタント」の「変数」から「Today」、ページ数なら「CurrentPage」を選べばよい。



・ 変数は以下のように組み合わせても設定できる

=Global.CurrentPage + "/" + Global.TotalPages

・ FormatString プロパティでフィールドの書式設定ができる。




・ 式アシスタントを使えば、ラベルにデーターソースの先頭値のみ表示させたい場合も簡単に編集できる。



・ 帳票を表示する Window に XamReportViewer を配置すればよし。



・XamReportViewer を ViewModel とバインドさせるには、以下のように XAML を記述すればよし。ClientRenderSettings.DataSources には複数のデータソースを設定できる。ただし現時点では ClientRenderSettings.DataSources の詳細はまだ把握していない。

<ig:XamReportViewer>
	<ig:XamReportViewer.RenderSettings>
		<ig:ClientRenderSettings 
			DefinitionUri="/Tenz.Idaten.Order;component/Window/Report/DriverSalesReport.igr" >
			<ig:ClientRenderSettings.DataSources>
				<ig:DataSource TargetDataSource="DriverSales" 
					ItemsSource="{Binding SalesList}" />
				<ig:DataSource TargetDataSource="DriverSalesInfo" 
					ItemsSource="{Binding SalesInfo}" />
			</ig:ClientRenderSettings.DataSources>
		</ig:ClientRenderSettings>
	</ig:XamReportViewer.RenderSettings>
</ig:XamReportViewer>


ViewModel の実装は以下のとおり。MVVM インフラには Livet を使用してる。

Public Class DriverSalesReportWindowViewModel
	Inherits ViewModel

#Region "SalesList変更通知プロパティ"
	Private _SalesList As IEnumerable(Of DriverSales)

	Public Property SalesList() As IEnumerable(Of DriverSales)
		Get
			Return _SalesList
		End Get
		Set(ByVal value As IEnumerable(Of DriverSales))
			_SalesList = value
			RaisePropertyChanged("SalesList")
		End Set
	End Property
#End Region

#Region "SalesInfo変更通知プロパティ"
	Private _SalesInfo As IEnumerable(Of DriverSalesInfo)

	Public Property SalesInfo() As IEnumerable(Of DriverSalesInfo)
		Get
			Return _SalesInfo
		End Get
		Set(ByVal value As IEnumerable(Of DriverSalesInfo))
			_SalesInfo = value
			RaisePropertyChanged("SalesInfo")
		End Set
	End Property
#End Region

End Class


他の ViewModel に定義したコマンド用のメソッド。最初に ViewModel を生成し、次に帳票を起動してる。

Private Sub Print()
	Dim vm As New DriverSalesReportWindowViewModel()
	vm.SalesList = Me.GetSalesList()
	vm.SalesInfo = Me.GetSalesInfo()

	Dim report As New DriverSalesReportWindow()
	report.DataContext = vm
	report.ShowDialog()
End Sub


 

*1:この例ではオブジェクトデータソースを設定してる