ActiveReports for .NET 18.0J
レポートとデータソースの連結
ActiveReportsユーザーガイド > 基本操作 > セクションレポートの基本操作 > レポートのデータ > レポートとデータソースの連結

デザイン時に[レポートデータソース]ダイアログを使用して、セクションレポートをデータソースに連結することができます。[レポートデータソース]ダイアログは以下のいずれかの方法で開くことができます。

[レポートデータソース]ダイアログは、最も一般的な5種類のデータソースのタブを備えています。

次の手順は、Visual Studioのプロジェクトにセクションレポートのテンプレートが追加されていることを前提にしています。追加の詳細については、「クイックスタート」を参照してくだざい。

メモ: データの使用にはNorthWindデータベース(<User folder>\Samples\Data)へのアクセス権限が必要です。

OLE DBデータソースを使用する

  1. [レポートデータソース]ダイアログの[OLE DB]タブで、[接続文字列:]の横にある[作成]ボタンをクリックします。
  2. [データ リンク プロパティ]ウィンドウで、[Microsoft Jet 4.0 OLE DB Provider]を選択し、[次へ]ボタンをクリックします。
  3. <...>ボタンをクリックし、データベース(例 NWind.mdb)へのアクセスパスを参照します。アクセスパスの選択が完了したら、[開く]をクリックします。
  4. [接続のテスト]ボタンをクリックし、データベースへの接続を確認します。
  5. [OK]をクリックし、[レポートデータソース]ダイアログに戻ります。[接続文字列]フィールドにテキストが自動的に追加されます。
  6. [OLE DB]タブの[クエリ]フィールドにデータベースからデータを選択するSQLステートメントを入力します(例 Select * From CUSTOMERS)。
     

    または

    [レポートデータソース]ダイアログ内のボタンをクリックしてクエリデザイナを開き、SQLクエリを作成することもできます。クエリデザイナを使用して対話的にクエリを作成する方法については、「クエリデザイナ」を参照してください。

  7. [OK]をクリックしてデータソースを保存し、レポートのデザイナ面に戻ります。

ODBC データソースを使用する

ODBCデータソースに接続する前に、ODBCドライバをインストールしてODBCデータソースを設定する必要があります。

  1. [レポートデータソース]ダイアログの[ODBC]タブをクリックします。
  2. 表示されたウィンドウの[接続文字列]フィールドで、接続文字列を入力します(例 Provider=MSDASQL;Persist Security Info=False;DSN=MS Access Database)。
  3. [ODBC]タブの[クエリ]フィールドにデータベースからデータを選択するSQLステートメントを入力します(例 Select * From CUSTOMERS)。
  4. [OK]をクリックしてデータソースを保存し、レポートのデザイナ面に戻ります。

SQLデータソースを使用する

  1. [レポートデータソース]ダイアログの[SQL]タブで、[接続文字列:]の横にある[作成]ボタンをクリックします。
  2. [データ リンク プロパティ]ダイアログで、Microsoft OLE DB Provider for SQL Serverを選択し、[次へ]ボタンをクリックします。
  3. ダイアログの[接続]タブで、以下のように設定します。
    • [サーバー名を選択まはた入力します]フィールドで、ドロップダウンリストからサーバー名を選択します。
    • [サーバーへのログオンに必要な情報を入力します]オプションで、Windows NTの統合セキュリティを選択するか、特定のユーザー名とパースワードを指定します。
    • [サーバー上のデータベースを選択する]オプションで、サーバー上のデータベースを選択するか、データベースのファイルを添付します。
    • [接続のテスト]ボタンをクリックし、データベース接続を確認します。
  4. [OK]をクリックして[データ リンク プロパティ]ダイアログを閉じ、[レポートデータソース]ダイアログに戻ります。[接続文字列]フィールドに、テキストが自動的に追加されます。
  5. [SQL]タブの[クエリ]フィールドにデータベースからデータを選択するSQLクエリを入力します(例 Select * From CUSTOMERS)。
     

    または

    [レポートデータソース]ダイアログ内のボタンをクリックしてクエリデザイナを開き、SQLクエリを作成することもできます。クエリデザイナを使用して対話的にクエリを作成する方法については、「クエリデザイナ」を参照してください。

  6. [OK]をクリックしてデータソースを保存し、レポートのデザイナ面に戻ります。

XMLデータソースを使用する

  1. [レポートデータソース]ダイアログで、[XML]タブを選択し、[ファイルURL:]の横にある<...>ボタンをクリックします。
  2. [ファイルを開く]ウィンドウで、XMLデータファイルへのアクセスパスを参照し、[開く]ボタンをクリックします。サンプルファイルとして、(<User folder>\Samples\Data)にある「customer.xml」のXMLデータを使用します。
  3. [レコードセットパターン]フィールドに、例のようなXPathのパターンを入力します(例 //CUSTOMER)。
  4. [OK]をクリックしてデータソースを保存し、レポートのデザイナ面に戻ります。

CSVデータソースを使用する

  1. [レポートデータソース]ダイアログの[CSV]タブで、[接続文字列]の横にある[作成]ボタンをクリックします。
  2. [開く]ボタンをクリックし、特定のCSVファイルへのファイルパスを指定して選択します。
  3. ウィザード内で各オプションを設定します。オプションの詳細については、「CSV Provider」内の「接続文字列」の項を参照してください。
  4. [プレビューから取得]ボタンをクリックして、プレビューで表示される列の名前、データ長(可能な場合)、データ型を編集することができます。
  5. [OK]ボタンをクリックして変更内容を保存し、ダイアログを閉じます。作成された接続文字列が、[接続文字列]タブ内に表示されます。[データソースを確認]アイコンをクリックすると、接続文字列を確認することができます。
  6. [OK]ボタンをクリックしてダイアログを閉じます。これでレポートを正常にCSVデータソースに接続することができました。CSVデータソースのデータセットが自動で追加されています。
    注意:[データ長]は、[データの形式]「固定長のデータ」の場合のみ設定可能になります。

アンバウンドデータソース、またはIEnumerableデータソースに接続するには、以下のコードを実行してください。

アンバウンドデータソースを使用する

データ接続を作成する

  1. Imports(VB)、またはusing(C#)ステートメントを追加し、System.DataおよびSystem.Data.Oledb名前空間を参照します。
  2. デザイナ面の周囲にあるグレーの領域を右クリックし、「プロパティ」を選択します。
  3. [プロパティ]ウィンドウで、イベントのアイコンをクリックし、使用可能なイベントの一覧を開きます。
  4. イベントの一覧からReportStartイベントを選択し、ダブルクリックします。ReportStartイベントのイベント処理メソッドが作成されます。
  5. ハンドラにコードを追加します。

    Visual Basic

    Visual Basicコード(ReportStartイベントの上に貼り付けます)
    コードのコピー
    Dim m_cnnString As String
    Dim sqlString As String
    Dim m_reader As OleDbDataReader
    Dim m_cnn As OleDbConnection    
    
    Visual Basicコード(ReportStartイベント内に貼り付けます)
    コードのコピー
    'データソースの接続文字列を設定します。
    m_cnnString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
            + "Data Source=C:\Program Files\ActiveReportsNET18\Samples\Data\Nwind.mdb;Persist Security Info=False"
    'データソースのSQLクエリを設定します。    
    sqlString = "SELECT * FROM categories INNER JOIN products ON categories.categoryid " _
            + "= products.categoryid ORDER BY products.categoryid, products.productid"
    'DataReaderを作成します。     
    m_cnn = New OleDb.OleDbConnection(m_cnnString)
    Dim m_Cmd As New OleDb.OleDbCommand(sqlString, m_cnn)
    If m_cnn.State = ConnectionState.Closed Then
       m_cnn.Open()
    End If
    m_reader = m_Cmd.ExecuteReader()
    

    C#

    C#コード(ReportStartイベントの上に貼り付けます)
    コードのコピー
    private static OleDbConnection m_cnn;
    private static OleDbDataReader m_reader;  
    private string sqlString;
    private string m_cnnString;
    
    C#コード(ReportStartイベント内に貼り付けます)
    コードのコピー
    //データソースの接続文字列を設定します。    
    m_cnnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
            + @"C:\Program Files\ActiveReportsNET18\Samples\Data\Nwind.mdb;Persist Security Info=False";
    //データソースのSQLクエリを設定します。     
    sqlString = "SELECT * FROM categories INNER JOIN products"
            + " ON categories.categoryid = products.categoryid"
            + " ORDER BY products.categoryid, products.productid";
    //DataReaderを作成します。               
    m_cnn = new OleDbConnection(m_cnnString);
    OleDbCommand m_Cmd = new OleDbCommand(sqlString,m_cnn);
    if(m_cnn.State == ConnectionState.Closed)
    {
      m_cnn.Open();
    }
    m_reader = m_Cmd.ExecuteReader();
    

データ接続を閉じる

  1. デザイナ面の周囲にあるグレーの領域を右クリックし、「プロパティ」を選択します。
  2. [プロパティ]ウィンドウで、イベントのアイコンをクリックし、使用可能なイベントの一覧を開きます。
  3. イベントの一覧からReportEndイベントを選択し、ダブルクリックします。ReportEndイベントのイベント処理メソッドが作成されます。
  4. ハンドラに次のコードを追加します。

    Visual Basic

    Visual Basicコード(ReportEndイベント内に貼り付けます)
    コードのコピー
    m_reader.Close()
    m_cnn.Close()
    

    C#

    C#コード(ReportEndイベント内に貼り付けます)
    コードのコピー
    m_reader.Close();
    m_cnn.Close();
    

フィールドのコレクションを作成する

  1. デザイナ面の周囲にあるグレーの領域を右クリックし、「プロパティ」を選択します。
  2. [プロパティ]ウィンドウで、イベントのアイコンをクリックし、使用可能なイベントの一覧を開きます。
  3. イベントの一覧からDataIntializeイベントを選択し、ダブルクリックします。DataInitializeイベントのイベント処理メソッドが作成されます。 
  4. ハンドラに次のコードを追加します。

    Visual Basic

    Visual Basicコード(DataInitializeイベント内に貼り付けます)
    コードのコピー
    Fields.Add("CategoryName")
    Fields.Add("ProductName")
    Fields.Add("UnitsInStock")
    Fields.Add("Description")
    

    C#

    C#コード(DataInitializeイベント内に貼り付けます)
    コードのコピー
    Fields.Add("CategoryName");
    Fields.Add("ProductName");
    Fields.Add("UnitsInStock");
    Fields.Add("Description");
    

フィールドにデータを入力

注意: フィールドコレクションへのアクセスには、DataInitializeイベントかFetchDataイベントを使用してください。他のイベントからアクセスした場合、動作は保障されません。
  1. デザイナ面の周囲にあるグレーの領域を右クリックし、「プロパティ」を選択します。
  2. [プロパティ]ウィンドウで、イベントのアイコンをクリックし、使用可能なイベントの一覧を開きます。
  3. イベントの一覧からFetchDataイベントを選択し、ダブルクリックします。FetchDataイベントのイベント処理メソッドが作成されます。
  4. ハンドラに次のコードを追加します 

    Visual Basic

    Visual Basicコード(FetchDataイベント内に貼り付けます)
    コードのコピー
    Try
        m_reader.Read()
        Me.Fields("CategoryName").Value = m_reader("CategoryName")
        Me.Fields("ProductName").Value = m_reader("ProductName")
        Me.Fields("UnitsInStock").Value = m_reader("UnitsInStock")
        Me.Fields("Description").Value = m_reader("Description")
        eArgs.EOF = False
    Catch ex As Exception
        eArgs.EOF = True
    End Try
    

    C#

    C#コード(FetchDataイベント内に貼り付けます)
    コードのコピー
    try
    {
        m_reader.Read();
        Fields["CategoryName"].Value = m_reader["CategoryName"].ToString();
        Fields["ProductName"].Value = m_reader["ProductName"].ToString();
        Fields["UnitsInStock"].Value = m_reader["UnitsInStock"].ToString();
        Fields["Description"].Value = m_reader["Description"].ToString();
        eArgs.EOF = false;
    }
    catch
    {
        eArgs.EOF = true;
    }
    
ヒント: 実行時にデータを表示するには、レポート上に配置したコントロールのDataFieldプロパティをコードでフィールドコレクションに追加されたフィールド名に割り当てます。

IEnumerableデータソースを使用する

  1. デザイナ面を右クリックし、[コードの表示]を選択します。
  2. レポートのクラス内に次のコードを追加します。

    Visual Basic

    Visual Basicコード(レポートのクラスの内に張り付けます)
    コードのコピー
    Private datasource1 As IEnumerator(Of String) = Nothing 
    Dim list As List(Of String)= Nothing
    
    Visual Basicコード(レポートのクラスの内に張り付けます)
    コードのコピー
    Private Function GetIEnumerableData() As IEnumerable(Of String)    
        For i As Integer = 1 To 10
           list.Add(String.Format("テストデータ_{0}", i.ToString()))       
        Next       
        Return list
    End Function
    

    C#

    C#コード(レポートのクラス内に張り付けます)
    コードのコピー
    private IEnumerator<string> datasource = null;
    
    C#コード(レポートのクラス内に張り付けます)
    コードのコピー
    private IEnumerable<string> GetIEnumerableData()
    {
        for (int i = 1; i <= 10; i++)
        {
            yield return string.Format("テストデータ_{0}", i.ToString());
        }
    }
    
  3. デザイナ面の周囲にあるグレーの領域を右クリックし、「プロパティ」を選択します。
  4. [プロパティ]ウィンドウで、イベントのアイコンをクリックし、使用可能なイベントの一覧を開きます。
  5. イベントの一覧からDataIntializeイベントを選択し、ダブルクリックします。DataInitializeイベントのイベント処理メソッドが作成されます。
  6. ハンドラに次のコードを記載し、レポートのフィールドコレクションにフィールドを追加します。

    Visual Basic

    Visual Basicコード(DataInitializeイベント内に貼り付けます)
    コードのコピー
    Me.Fields.Add("TestField")
    Me.list = New List(Of String)
    datasource1 = GetIEnumerableData().GetEnumerator()
    

    C#

    C#コード(DataInitializeイベント内に貼り付けます)
    コードのコピー
    this.Fields.Add("TestField");
    datasource = GetIEnumerableData().GetEnumerator();
    
  7. [プロパティ]ウィンドウでイベントの一覧を開くために、3と4手順を繰り返して実行します。
  8. イベントの一覧からFetchDataイベントを選択し、ダブルクリックします。FetchDataイベントのイベント処理メソッドが作成されます。
  9. ハンドラにコードを追加し、フィールドを入力するデータを取得します。

    Visual Basic

    Visual Basicコード(FetchDataイベント内に貼り付けます)
    コードのコピー
    If datasource1.MoveNext() Then
       Me.Fields("TestField").Value = datasource1.Current
       eArgs.EOF = False
    Else
       eArgs.EOF = True
    End If
    

    C#

    C#コード(FetchDataイベント内に貼り付けます)
    コードのコピー
    if (datasource.MoveNext())
    {
        this.Fields["TestField"].Value = datasource.Current;
        eArgs.EOF = false;
    }
    else
        eArgs.EOF = true;
    
ヒント: 実行時にデータを表示するには、レポート上に配置したコントロールのDataFieldプロパティをコードでフィールドコレクションに追加されたフィールド名に割り当てます。
関連トピック