FlexGrid for WinForms
連結モード
データ > 連結モード

連結モードは、その名前が示すように、グリッドが基盤のデータソースからデータを取得する状態を指します。また、データ連結では、複数のデータコンシューマーが同期的にデータプロバイダと接続できます。

FlexGrid は、ObservableCollection、IList<T>、List<T>、Array、BindingSource、ADO.NET オブジェクト(DataSet、DataTable など)のような一般に使用される大部分のデータソースに対するデータ連結をサポートします。

設計時の Flexgrid データ連結

FlexGrid とデータソースを連結するには、次の 3 つの方法があります。

設計時の連結

  1. デザインビューで、FlexGrid コントロールを選択し、スマートタグをクリックしてC1FlexGrid タスクメニューを開きます。
  2. [データソースの選択]ドロップダウンボタンをクリックし、[プロジェクトデータソースの追加]オプションを選択してデータソース構成ウィザードを開きます。
  3. [データソースの種類の選択] ページで、[データベース]を選択し、[次へ]をクリックします。
  4. [データベースモデルの選択]ページで、[データセット]を選択し、[次へ]をクリックします。
  5. [データ接続の選択]ページで、[新しい接続] をクリックして [接続の追加] ダイアログを開きます。
  6. [データソース]フィールドに対して、[選択]ボタンをクリックして [データソースの変更]ダイアログを開きます。
  7. [Microsoft Access データベースファイル]を選択し、[OK] をクリックして[接続の追加]ダイアログに戻ります。
  8. [データベースファイル名]フィールドに対して、[参照]をクリックして、データベースファイルに移動します。データベースファイルへの接続に必要な場合は、ユーザー名パスワードを指定します。 この例では、デフォルトで次の場所にある C1NWind.mdb ファイルを使用します。
    \Documents\ComponentOne Samples\Common
  9. [接続のテスト]をクリックしてデータベースまたはサーバーに正しく接続されていることを確認し、[OK]をクリックします。
  10. [OK]をクリックして[接続の追加]ダイアログボックスを閉じます。
  11. [次へ]をクリックして続行します。データファイルをプロジェクトに追加し、接続文字列を修正するかどうかを確認するダイアログボックスが表示されます。要件に従って適切なオプションを選択します。
  12. [次の名前で接続を保存する]ボックスをオンにして名前を入力して、接続文字列をアプリケーション構成ファイルに保存します。
  13. [次へ]をクリックして[データベースオブジェクトの選択]ページに切り替えます。
  14. [テーブル]ノードから、たとえば Products テーブルを選択し、[終了]をクリックします。
  15. 以上の手順で、プロジェクトにデータセットと接続文字列が追加されます。また、Visual Studio は、データセットを設定するための以下のコードを自動的に作成します。
     // 次のサンプルコードは、データを「c1NWindDataSet.Products」テーブルにロードします。 必要に応じて、移動または削除できます。
     this.productsTableAdapter.Fill(this.c1NWindDataSet.Products);
    
     ' 次のサンプルコードは、データを「c1NWindDataSet.Products」テーブルにロードします。 必要に応じて、移動または削除できます。                    
     Me.ProductsTableAdapter.Fill(Me.c1NWindDataSet.Products)
    

DataSource プロパティを使用した実行時の連結

FlexGrid は、実行時に FlexGrid コントロールとデータソースを連結するために DataSource プロパティを提供しています。FlexGrid の DataSource プロパティには、データソースオブジェクトを割り当てる必要があります。データソースオブジェクトに 2 つ以上のテーブルがある場合は、DataMember プロパティにテーブル名を設定して、目的のテーブルを指定できます。

以下のコードは、DataSource プロパティを使用してデータを WinForms FlexGrid に連結します。

c1FlexGrid1.BeginUpdate();
C1DataCollection<Customer> c1DataCollection = new C1DataCollection<Customer>(GetData());
c1FlexGrid1.DataSource = new C1DataCollectionBindingList(c1DataCollection);
c1FlexGrid1.EndUpdate();
c1FlexGrid1.BeginUpdate()
Dim c1CollectionView As C1.DataCollection.C1DataCollection(Of Customer) = New C1.DataCollection.C1DataCollection(Of Customer)(GetData())
c1FlexGrid1.DataSource = New C1.DataCollection.BindingList.C1DataCollectionBindingList(c1CollectionView)
c1FlexGrid1.EndUpdate()

上記のサンプルコードは、GetData という名前のカスタムメソッドを使用してデータを提供しています。要件に基づいてデータソースを設定できます。以下のコードは、WinForms FlexGrid のデータを作成する例を示しています。

ObservableCollection<Customer> GetData()
{
    var data = new ObservableCollection<Customer>();
    for (int i = 0; i < 25; i++)
        data.Add(new Customer());
    return data;
}
Private Function GetData() As ObservableCollection(Of Customer)
    Dim data = New ObservableCollection(Of Customer)()

    For i = 0 To 25 - 1
        data.Add(New Customer())
    Next

    Return data
End Function

SetDataBinding メソッドを使用した実行時の連結

FlexGrid には SetDataBinding メソッドもあり、これを使用して DataSource プロパティと DataMember プロパティの両方を 1 回の呼び出しで設定できます。以下のコードは、SetDataBinding メソッドを使用して、親テーブルといくつかの子テーブルを別々のグリッドにレンダリングする例を具体的に示しています。

以下のコードは、SetDataBinding メソッドを使用して、データを WinForms FlexGrid に連結する方法を具体的に示しています。

// グリッドにデータセットを連結します
_flexCustomers.BeginUpdate();
_flexCustomers.SetDataBinding(ds, "Customers");
_flexCustomers.EndUpdate();

_flexOrders.BeginUpdate();
_flexOrders.SetDataBinding(ds, "Customers.CustomerOrders");
_flexOrders.EndUpdate();

_flexOrderDetails.BeginUpdate();
_flexOrderDetails.SetDataBinding(ds, "Customers.CustomerOrders.OrderDetails");
_flexOrderDetails.EndUpdate();
' グリッドにデータセットを連結します
_flexCustomers.BeginUpdate()
_flexCustomers.SetDataBinding(ds, "Customers")
_flexCustomers.EndUpdate()
            
_flexOrders.BeginUpdate()
_flexOrders.SetDataBinding(ds, "Customers.CustomerOrders")
_flexOrders.EndUpdate()
  
_flexOrderDetails.BeginUpdate()
_flexOrderDetails.SetDataBinding(ds, "Customers.CustomerOrders.OrderDetails")
_flexOrderDetails.EndUpdate()
関連トピック