ActiveReportsでは、スクリプトを使用することで、XMLファイルに保存されたレポートレイアウトに、コードを含めることができます。RPXファイルをXMLファイルに保存するときにスクリプトを含めることで、後からデザイナを使用せずに、レポートをロード、実行し、直接ビューワコントロールに表示できます。このチュートリアルでは、スクリプトを使用し、単純なスタンドアロンレポートを作成する方法について紹介します。
このトピックでは、以下のタスクを行います。
- Visual StudioプロジェクトにActiveReportを追加する
- レポートをデータソースに接続する
- レポートのレイアウトを作成する
- コントロールからデータを取得するためにスクリプトを追加する
- レポートをRPXファイルとして保存する
- レポートを表示する
 |
メモ:このチュートリアルは、Northwindデータベース(Nwind.mdb)のテーブルを使用しています。Northwindデータベース(..ActiveReportsNET9\Data\Nwind.mdb)へのアクセス権限が必要です。 |
チュートリアルを完了すると、次のようなレポートが作成されます。
設計時のレイアウト
実行時のレイアウト
Visual StudioプロジェクトにActiveReportを追加する
- Visual Studioで新規プロジェクトを開きます。
- [プロジェクト]メニューから[新しい項目の追加]を選択します。
- [新しい項目の追加]ダイアログでは、[ActiveReports 9.0Jセクションレポート(コード)]を選択し、名前を「rptSimpleScript」に変更します。
- [追加]ボタンをクリックします。
詳細は、「プロジェクトにレポートを追加する」を参照してくだざい。
レポートをデータソースに接続する
 |
ヒント: [レポートエクスプローラ]ノードの下にフィールドを表示するために以下の手順を行います。 |
- Detailセクションのバンド上にあるデータソースのアイコンをクリックします。
- [レポートデータソース]ダイアログでは、[接続文字列]の横にある[OLE DB]タブにある[作成]ボタンをクリックします。
- [データリンクプロパティ]ウィンドウでは、[Microsoft Jet 4.0 OLE DB Provider]を選択し、、[次へ]ボタンをクリックして、[接続]タブへ移動します。
- (...)をクリックし、Nwind.mdbへのアクセスパスを参照します。アクセスパスの選択が完了したら、[開く]をクリックします。
- [接続のテスト]ボタンをクリックし、データベースへの接続を確認します。
- [OK]をクリックし、[レポートデータソース]ダイアログに戻ります。[接続文字列]フィールドで、テキストが自動的に追加されます。
-
[OLE DB]タブの[クエリ]フィールドに以下のSQLクエリを入力します。
SQLクエリ |
コードのコピー
|
SELECT * FROM categories INNER JOIN products ON categories.categoryid =
products.categoryid ORDER BY products.categoryid, products.productid
|
- [OK] をクリックし、レポートのデザイナ面に戻ります。
レポートのレイアウトを作成する
- レポートのデザイナ面を右クリックし、[挿入]を選択して、[グループヘッダ/フッタ]を選択します。
- グループヘッダの高さを調節します。
- GroupHeaderセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
値 |
Name |
GroupHeader1 |
BackColor |
LightBlue |
CanShrink |
True |
DataField |
CategoryName |
GroupKeepTogether |
All |
KeepTogether |
True |
- 「デザイナ面」のグレーの領域を選択し、[プロパティ]ウィンドウからPrintWidthプロパティを「6.5」に設定します。
- ツールボックスから、以下のコントロールをGroupHeaderセクション上にドラッグし、以下のプロパティを設定します。
TextBox1
プロパティ名 |
値 |
DataField |
CategoryName |
Location |
0, 0 in |
Size |
6.5, 0.2 in |
BackColor |
CadetBlue |
Font Bold |
True |
Font Size |
12 |
TextBox2
プロパティ名 |
値 |
DataField |
Description |
Location |
0, 0.2 in |
Size |
6.5, 0.2 in |
BackColor |
CadetBlue |
Label1
プロパティ名 |
値 |
Text |
商品名 |
Location |
0, 0.4 in |
Size |
1, 0.2 in |
Font Bold |
True |
Label2
プロパティ名 |
値 |
Text |
在庫数 |
Location |
5.5, 0.4 in |
Size |
1, 0.2 in |
Font Bold |
True |
Alignment |
Right |
- ツールボックスから、以下のコントロールをdetailセクション上にドラッグし、以下のプロパティを設定します。
TextBox1
プロパティ名 |
値 |
DataField |
ProductName |
Location |
0, 0 in |
Size |
5.5, 0.2 in |
TextBox2
プロパティ名 |
値 |
DataField |
UnitsInStock |
Location |
5.5, 0 in |
Size |
1, 0.2 in |
Alignment |
Right |
- Detailセクションを選択し、[プロパティ]ウィンドウからCanShrinkプロパティを「True」に設定し、読み込んだレポートの空白スペースを除去します。
- Detailセクションでは、TextBox1とTextBox2を選択し、右クリックから[罫線]を選択します。
- 色のコンボボックスでは、「DarkCyan」を選択します。
- 線種では、直線を選択します。
- ブレビューペインでは、下の端をクリックします。
- [OK]をクリックし、テキストボックスの下端に「DarkCyan」色の罫線を追加します。
- グループフッタの高さを調節します。
- GroupFooterセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
プロパティ名 |
値 |
BackColor |
PaleGreen |
CanShrink |
True |
- ツールボックスから、以下のコントロールをGroupFooterセクション上にドラッグし、以下のプロパティを設定します。
TextBox1
プロパティ名 |
値 |
DataField |
TotalLabel |
Location |
2.5, 0 in |
Size |
3, 0.2 in |
Font Bold |
True |
TextBox2
プロパティ名 |
値 |
DataField |
ProductName |
Location |
5.5, 0 in |
SummaryType |
Subtotal |
SummaryFunc |
Count |
SummaryRunning |
Group |
SummaryGroup |
GroupHeader1 |
Alignment |
Right |
Label1
プロパティ名 |
値 |
Location |
0, 0.25 in |
Size |
6.5, 0.2 in |
BackColor |
White (小計の後に、空白スペースを作成します) |
Text |
 |
メモ: デフォルトテキストを削除します。 |
|
コントロールからデータを取得するためにスクリプトを追加する
- レポートの下のグレーの領域をクリックし、[プロパティ]ウィンドウから、ScriptLanguageプロパティを使用したいスクリプトの言語に変更します。デフォルトではC#が設定されています。
- レポートデザイナの下にある[スクリプト]タブをクリックし、スクリプトエディタにアクセスします。以下のスクリプトをスクリプトエディタに追加します。
 |
注意: FieldCollectionには、DataInitializeイベントまたはFetchDataイベントを使用してアクセスしてください。他のイベントからアクセスした場合、動作は保障されません。 |
Visual Basic
Visual Basicコード(スクリプトエディタウィンドウに貼り付けます) |
コードのコピー
|
Private Shared m_reader As System.Data.OleDb.OleDbDataReader
Private Shared m_cnn As System.Data.OleDb.OleDbConnection
Public Sub ActiveReport_ReportStart()
'レポートのデータ接続を設定します。
rpt.DataSource = ""
Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\[User Folder]\Documents\ComponentOne Samples\ActiveReports Developer 7\Data\NWIND.mdb"
Dim sqlString As String = "SELECT * FROM categories INNER JOIN products ON categories.categoryid = products.categoryid ORDER BY products.categoryid, products.productid"
m_cnn = new System.Data.OleDb.OleDbConnection(connString)
Dim m_Cmd As System.Data.OleDb.OleDbCommand = new System.Data.OleDb.OleDbCommand(sqlString, m_cnn)
If m_cnn.State = System.Data.ConnectionState.Closed Then
m_cnn.Open
End If
m_reader = m_Cmd.ExecuteReader
End Sub
Public Sub ActiveReport_DataInitialize()
'レポートにデータフィールドを追加します。
rpt.Fields.Add("CategoryID")
rpt.Fields.Add("CategoryName")
rpt.Fields.Add("ProductName")
rpt.Fields.Add("UnitsInStock")
rpt.Fields.Add("Description")
rpt.Fields.Add("TotalLabel")
End Sub
Public Function ActiveReport_FetchData(ByVal eof As Boolean) As Boolean
Try
m_reader.Read
'データリーダからのデータを、フィールドに読み込みます。
rpt.Fields("CategoryID").Value = m_reader("categories.CategoryID")
rpt.Fields("CategoryName").Value = m_reader("CategoryName")
rpt.Fields("ProductName").Value = m_reader("ProductName")
rpt.Fields("UnitsInStock").Value = m_reader("UnitsInStock")
rpt.Fields("Description").Value = m_reader("Description")
'静的なテキストとデータを結合します。
rpt.Fields("TotalLabel").Value = m_reader("CategoryName")+ "の合計:"
eof = False
Catch
eof = True
End Try
Return eof
End Function
Public Sub ActiveReport_ReportEnd()
'データリーダと接続を切ります。
m_reader.Close
m_cnn.Close
End Sub
|
C#
C#コード(スクリプトエディタウィンドウに貼り付けます) |
コードのコピー
|
private static System.Data.OleDb.OleDbDataReader m_reader;
private static System.Data.OleDb.OleDbConnection m_cnn;
public void ActiveReport_ReportStart()
{
//レポートのデータ接続を設定します。
rpt.DataSource = "";
string m_cnnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\[User Folder]\Documents\ComponentOne Samples\ActiveReports Developer 7\Data\NWIND.mdb";
string sqlString = "SELECT * FROM categories INNER JOIN products ON categories.categoryid = products.categoryid ORDER BY products.categoryid, products.productid";
m_cnn = new System.Data.OleDb.OleDbConnection(m_cnnString);
System.Data.OleDb.OleDbCommand m_Cmd = new System.Data.OleDb.OleDbCommand(sqlString,m_cnn);
if(m_cnn.State == System.Data.ConnectionState.Closed)
{
m_cnn.Open();
}
m_reader = m_Cmd.ExecuteReader();
}
public void ActiveReport_DataInitialize()
{
//レポートにデータフィールドを追加します。
rpt.Fields.Add("CategoryID");
rpt.Fields.Add("CategoryName");
rpt.Fields.Add("ProductName");
rpt.Fields.Add("UnitsInStock");
rpt.Fields.Add("Description");
rpt.Fields.Add("TotalLabel");
}
public bool ActiveReport_FetchData(bool eof)
{
try
{
m_reader.Read();
//データリーダからのデータを、フィールドに読み込みます。
rpt.Fields["CategoryID"].Value = m_reader["categories.CategoryID"].ToString();
rpt.Fields["CategoryName"].Value = m_reader["CategoryName"].ToString();
rpt.Fields["ProductName"].Value = m_reader["ProductName"].ToString();
rpt.Fields["UnitsInStock"].Value = m_reader["UnitsInStock"].ToString();
rpt.Fields["Description"].Value = m_reader["Description"].ToString();
//静的なテキストとデータを結合します。
rpt.Fields["TotalLabel"].Value = m_reader["CategoryName"].ToString() + "の合計:";
eof = false;
}
catch
{
eof = true;
}
return eof;
}
public void ActiveReport_ReportEnd()
{
//データリーダと接続を切ります。
m_reader.Close();
m_cnn.Close();
}
|
レポートをRPXファイルとして保存する
- [レポート]メニューから[レイアウトファイルの保存]を選択します。
- [名前を付けて保存]ダイアログでは、ファイル名に「rptScript.rpx」を入力し、[保存]をクリックします。
レポートを表示する
- 設計時にレポートを表示するには、プレビュータブをクリックします。
または
関連トピック