ActiveReportsでは、スクリプトを使用することで、XMLファイルに保存されたレポートレイアウトに、コードを含めることができます。RPXファイルをXMLファイルに保存するときにスクリプトを含めることで、後からデザイナを使用せずに、レポートをロード、実行し、直接ビューワコントロールに表示できます。このチュートリアルでは、スクリプトを使用し、単純なスタンドアロンレポートを作成する方法について紹介します。
このトピックでは、以下のタスクを行います。
チュートリアルを完了すると、次のようなレポートが作成されます。
Visual StudioプロジェクトにActiveReportを追加する
詳細は、「クイックスタート」を参照してくだざい。
レポートをデータソースに接続する
SQLクエリ |
コードのコピー
|
---|---|
SELECT * FROM categories INNER JOIN products ON categories.categoryid = products.categoryid ORDER BY products.categoryid, products.productid |
レポートのレイアウトを作成する
プロパティ名 | プロパティの値 |
---|---|
Name | GroupHeader1 |
BackColor | LightBlue |
CanShrink | True |
DataField | CategoryName |
GroupKeepTogether | All |
KeepTogether | True |
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 |
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 |
プロパティ名 | プロパティの値 |
---|---|
BackColor | PaleGreen |
CanShrink | True |
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 |
メモ: デフォルトテキストを削除します。
|
コントロールからデータを取得するためにスクリプトを追加する
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:\Program Files\ActiveReportsNET16\Samples\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:\Program Files\ActiveReportsNET16\Samples\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ファイルとして保存する
レポートを表示する