ActiveReports for .NET 18.0J
スクリプトと単純なレポート
ActiveReportsユーザーガイド > サンプルとチュートリアル > チュートリアル > セクションレポートのチュートリアル > スクリプト > スクリプトと単純なレポート

ActiveReportsでは、スクリプトを使用することで、XMLファイルに保存されたレポートレイアウトに、コードを含めることができます。RPXファイルをXMLファイルに保存するときにスクリプトを含めることで、後からデザイナを使用せずに、レポートをロード、実行し、直接ビューワコントロールに表示できます。このチュートリアルでは、スクリプトを使用し、単純なスタンドアロンレポートを作成する方法について紹介します。

このトピックでは、以下のタスクを行います。

メモ:このチュートリアルは、Northwindデータベース(Nwind.mdb)のテーブルを使用しています。Northwindデータベース(..ActiveReportsNET18\Samples\Data\Nwind.mdb)へのアクセス権限が必要です。

チュートリアルを完了すると、次のようなレポートが作成されます。

デザイン時のレイアウト

実行時のレイアウト

Visual StudioプロジェクトにActiveReportを追加する

  1. Visual Studioで新規プロジェクトを開きます。
  2. [プロジェクト]メニューから[新しい項目の追加]を選択します。
  3. [新しい項目の追加]ダイアログで、[ActiveReports 18.0Jセクションレポート(コード)]を選択し、名前を「rptSimpleScript」に変更します。
  4. [追加]ボタンをクリックします。

詳細は、「クイックスタート」を参照してくだざい。

レポートをデータソースに接続する

ヒント: [レポートエクスプローラ]ノードの下にフィールドを表示するために以下の手順を行います。
  1. Detailセクションのバンド上にあるデータソースのアイコンをクリックします。
  2. [レポートデータソース]ダイアログで、[接続文字列]の横にある[OLE DB]タブにある[作成]ボタンをクリックします。
  3. [データリンクプロパティ]ウィンドウで、[Microsoft Jet 4.0 OLE DB Provider]を選択し、、[次へ]ボタンをクリックして、[接続]タブへ移動します。
  4. (...)をクリックし、Nwind.mdbへのアクセスパスを参照します。アクセスパスの選択が完了したら、[開く]をクリックします。
  5. [接続のテスト]ボタンをクリックし、データベースへの接続を確認します。
  6. [OK]をクリックし、[レポートデータソース]ダイアログに戻ります。[接続文字列]フィールドで、テキストが自動的に追加されます。
  7. [OLE DB]タブの[クエリ]フィールドに以下のSQLクエリを入力します。
    SQLクエリ
    コードのコピー
    SELECT * FROM categories INNER JOIN products ON categories.categoryid = 
    products.categoryid ORDER BY products.categoryid, products.productid
                                            
    
  8. [OK] をクリックし、レポートのデザイナ面に戻ります。

レポートのレイアウトを作成する

  1. レポートのデザイナ面を右クリックし、[挿入]を選択して、[グループヘッダ/フッタ]を選択します。
  2. グループヘッダの高さを調節します。
  3. GroupHeaderセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    Name GroupHeader1
    BackColor LightBlue
    CanShrink True
    DataField CategoryName
    GroupKeepTogether All
    KeepTogether True
  4. 「デザイナ面」のグレーの領域を選択し、[プロパティ]ウィンドウからPrintWidthプロパティを「6.5」に設定します。
  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
  6. ツールボックスから、以下のコントロールを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
  7. Detailセクションを選択し、[プロパティ]ウィンドウからCanShrinkプロパティを「True」に設定し、読み込んだレポートの空白スペースを除去します。
  8. Detailセクションで、TextBox1とTextBox2を選択し、右クリックから[罫線]を選択します。
    • 色のコンボボックスで、「DarkCyan」を選択します。
    • 線種で、直線を選択します。
    • ブレビューパネルで、下の端をクリックします。
    • [OK]をクリックし、テキストボックスの下端に「DarkCyan」色の罫線を追加します。
  9. グループフッタの高さを調節します。
  10. GroupFooterセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    BackColor PaleGreen
    CanShrink True
  11. ツールボックスから、以下のコントロールを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
    メモ: デフォルトテキストを削除します。

コントロールからデータを取得するためにスクリプトを追加する

  1. レポートの下のグレーの領域をクリックし、[プロパティ]ウィンドウから、ScriptLanguageプロパティを使用したいスクリプトの言語に変更します。デフォルトではC#が設定されています。
  2. レポートデザイナの下にある[スクリプト]タブをクリックし、スクリプトエディタにアクセスします。以下のスクリプトをスクリプトエディタに追加します。

 

注意: 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:\Program Files\ActiveReportsNET18\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\ActiveReportsNET18\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ファイルとして保存する

  1. [レポート]メニューから[レイアウトファイルの保存]を選択します。
  2. [名前を付けて保存]ダイアログで、ファイル名に「rptScript.rpx」を入力し、[保存]をクリックします。

レポートを表示する

または