作成日: 2023/01/31 最終更新日: 2023/09/01
文書種別
使用方法
詳細
レポートのデータソースを動的に変更する直接的な機能は、Blazorビューワには用意されておりません。
代替案としては、パラメータを経由してJSONデータをレポートに渡す方法が考えられます。
Razorページ側の実装例
データオブジェクトをJSON文字列にシリアライズし、レポートのパラメータに渡します。
@using System.Text.Json;
<div class="main">
<div id="viewerContainer">
<ReportViewer @ref="_viewer"
ReportName="@_currentReport"
Parameters="@_params"
/>
</div>
</div>
@code{ private ReportViewer _viewer; private string _currentReport; private Parameter[] _params; protected override void OnInitialized() { _currentReport = "PageReport1.rdlx"; //_currentReport = "BlazorViewerServerApp1.Reports.SectionReport1"; var data = new List<TestData>(); data.Add(new TestData(1, 101)); data.Add(new TestData(1, 102)); data.Add(new TestData(1, 103)); data.Add(new TestData(2, 201)); data.Add(new TestData(3, 301)); var jsonString = JsonSerializer.Serialize(data); _params = new Parameter[] { new Parameter { Name = "ReportParameter1", Values = new string[]{ jsonString } } }; } private class TestData{ public int field1 { get; private set; } public int field2 { get; private set; } public TestData(int field1, int field2) { this.field1 = field1; this.field2 = field2; } } }
レポート側の実装例
-
ページレポート/RDLレポートの場合
データソースの種類に"Json Provider"を指定し、以下の式を設定します。
="jsondata=" & Parameters!ReportParameter1.Value
※データソースにパラメータを設定した状態でデータセットを追加する場合、クエリデザイナを使用することができず、クエリやフィールドをすべて手動で設定する必要があります。
一旦、テスト用のJSONファイル等に接続した状態でデータセットを追加してからパラメータに変更することをお勧めします。 -
コード形式セクションレポートの場合
DataInitializeイベントに以下の処理を実装します。
private void SectionReport1_DataInitialize(object sender, EventArgs e) { var data = new JsonDataSource(); data.JsonData = this.Parameters["ReportParameter1"].Value; data.JsonPath = "$.[*]"; this.DataSource = data; }
-
XML形式セクションレポートの場合
スクリプトに以下の処理を実装します。
using GrapeCity.ActiveReports.SectionReportModel;
using GrapeCity.ActiveReports.Data;
public void ActiveReport_DataInitialize()
{
var data = new JsonDataSource();
data.JsonData = rpt.Parameters["ReportParameter1"].Value;
data.JsonPath = "$.[*]";
rpt.DataSource = data;
}