Share via


チュートリアル: 検索データ バインドをサポートする Windows フォーム ユーザー コントロールの作成

 

公開日: 2016年4月

フォームにデータを表示する場合は、ツールボックスから既存のコントロールを選択するか、またはアプリケーションが標準コントロールでは提供できない機能を必要とする場合は、カスタム コントロールを記述できます。 このチュートリアルでは、LookupBindingPropertiesAttribute を実装するコントロールを作成する方法を示します。 LookupBindingPropertiesAttribute を実装するコントロールには、データにバインドできるプロパティを 3 つ含めることができます。 このようなコントロールは、ComboBox に似ています。

コントロールの作成の詳細については、「デザイン時の Windows フォーム コントロールの開発」を参照してください。

データ バインディングのシナリオで使用するためのコントロールを作成するときは、次のいずれかのデータ バインド属性を実装する必要があります。

データ バインド属性の使用
単一のデータ列またはプロパティを表示する TextBox のような DefaultBindingPropertyAttribute を簡単なコントロールに実装します。 詳細については、「チュートリアル: 単純データ バインドをサポートする Windows フォーム ユーザー コントロールの作成」を参照してください。
データの一覧またはテーブルを表示する DataGridView のような ComplexBindingPropertiesAttribute をコントロールに実装します。 詳細については、「チュートリアル: 複合データ バインドをサポートする Windows フォーム ユーザー コントロールの作成」を参照してください。
データの一覧またはテーブルを表示しますが、単一の列またはプロパティを表示する必要もある ComboBox のような LookupBindingPropertiesAttribute をコントロールに実装します。 このチュートリアルでは、このプロセスについて説明します。

このチュートリアルでは、2 つのテーブルのデータにバインドする検索コントロールを作成します。 この例では、Northwind サンプル データベースの Customers テーブルと Orders テーブルを使用します。 この検索コントロールは Orders テーブルの CustomerID フィールドにバインドされます。 コントロールは、この値を使用して Customers テーブルの CompanyName を検索します。

このチュートリアルでは、次の作業を行う方法について説明します。

  • 新しい Windows アプリケーションを作成します。

  • 新しいユーザー コントロールをプロジェクトに追加します。

  • ユーザー コントロールをビジュアルに設計します。

  • LookupBindingProperty 属性を実装します。

  • データ ソース構成ウィザードを使用して、データセットを作成します。

  • [データ ソース] ウィンドウで Orders テーブルの [CustomerID] 列が新しいコントロールを使用するように設定します。

  • フォームを作成して、新しいコントロールにデータを表示します。

必須コンポーネント

このチュートリアルを完了するための要件は次のとおりです。

Windows アプリケーションの作成

最初に Windows アプリケーションを作成します。

新しい Windows プロジェクトを作成するには

  1. Visual Studio の [ファイル] メニューの [新しいプロジェクト] をクリックします。

  2. プロジェクトに LookupControlWalkthrough という名前を付けます。

  3. [Windows アプリケーション] をクリックし、[OK] をクリックします。 詳細については、「クライアント アプリケーション」を参照してください。

    LookupControlWalkthrough プロジェクトが作成されてソリューション エクスプローラーに追加されます。

プロジェクトへのユーザー コントロールの追加

このチュートリアルではユーザー コントロールから検索コントロールを作成するので、ユーザー コントロールの項目を LookupControlWalkthrough プロジェクトに追加します。

プロジェクトにユーザー コントロールを追加するには

  1. [プロジェクト] メニューの [ユーザー コントロールの追加] をクリックします。

  2. [ファイル名] 領域に「LookupBox」と入力し、[追加] をクリックします。

    LookupBox コントロールが ソリューション エクスプローラーに追加され、デザイナーが開きます。

LookupBox コントロールの設計

LookupBox コントロールを設計するには

  • ツールボックスからユーザー コントロールのデザイン サーフェイスに ComboBox をドラッグします。

必要なデータ バインディング属性の追加

データ バインディングをサポートする検索コントロールには、LookupBindingPropertiesAttribute を実装できます。

LookupBindingProperties 属性を実装するには

  1. LookupBox コントロールをコード ビューに切り替えます。 [表示] メニューの [コード] をクリックします。

  2. LookupBox のコードを次のコードで置き換えます。

    using System.Windows.Forms;
    
    namespace CS
    {
        [System.ComponentModel.LookupBindingProperties("DataSource", "DisplayMember", "ValueMember", "LookupMember")]
        public partial class LookupBox : UserControl
        {
            public object DataSource
            {
                get{ return comboBox1.DataSource; }
                set{ comboBox1.DataSource = value; }
            }
    
            public string DisplayMember
            {
                get{ return comboBox1.DisplayMember; }
                set{ comboBox1.DisplayMember = value; }
            }
    
            public string ValueMember
            {
                get{ return comboBox1.ValueMember; }
                set{ comboBox1.ValueMember = value; }
            }
    
            public string LookupMember
            {
                get{ return comboBox1.SelectedValue.ToString(); }
                set{ comboBox1.SelectedValue = value; }
            }
    
    
            public LookupBox()
            {
                InitializeComponent();
            }
        }
    }
    
    <System.ComponentModel.LookupBindingProperties("DataSource", "DisplayMember", "ValueMember", "LookupMember")>
    Public Class LookupBox
    
        Public Property DataSource() As Object
            Get
                Return ComboBox1.DataSource
            End Get
            Set(ByVal value As Object)
                ComboBox1.DataSource = value
            End Set
        End Property
    
        Public Property DisplayMember() As String
            Get
                Return ComboBox1.DisplayMember
            End Get
            Set(ByVal value As String)
                ComboBox1.DisplayMember = value
            End Set
        End Property
    
        Public Property ValueMember() As String
            Get
                Return ComboBox1.ValueMember
            End Get
            Set(ByVal value As String)
                ComboBox1.ValueMember = value
            End Set
        End Property
    
        Public Property LookupMember() As String
            Get
                Return ComboBox1.SelectedValue.ToString()
            End Get
            Set(ByVal value As String)
                ComboBox1.SelectedValue = value
            End Set
        End Property
    End Class
    
  3. [ビルド] メニューの [ソリューションのビルド] をクリックします。

データベースからのデータ ソースの作成

この手順では、データ ソース構成ウィザードを使用して、Northwind サンプル データベースの Customers テーブルと Orders テーブルに基づいてデータ ソースを作成します。 接続を作成するには、Northwind サンプル データベースへのアクセス権を持っている必要があります。 Northwind サンプル データベースのセットアップの詳細については、「方法 : サンプル データベースをインストールする」を参照してください。

データ ソースを作成するには

  1. [データ] メニューの [データ ソースの表示] をクリックします。

  2. [データ ソース] ウィンドウで、[新しいデータ ソースの追加] をクリックしてデータ ソース構成ウィザードを起動します。

  3. [データソースの種類を選択] ページで、[データベース] をクリックし、[次へ] をクリックします。

  4. [データ接続の選択] ページで、次のいずれかの操作を行います。

    • Northwind サンプル データベースへのデータ接続がドロップダウン リストに表示されている場合は選択します。

      または

    • [新しい接続] を選択して [接続の追加] または [接続の変更] ダイアログ ボックスを表示します。

  5. データベースにパスワードが必要な場合は、該当するオプションを選択して重要情報を含め、[次へ] をクリックします。

  6. [アプリケーション構成ファイルに接続文字列を保存] ページで、[次へ] をクリックします。

  7. [データベース オブジェクトの選択] ページの [テーブル] ノードを展開します。

  8. Customers テーブルと Orders テーブルを選択し、[完了] をクリックします。

    プロジェクトに NorthwindDataSet が追加され、[データ ソース] ウィンドウに Customers テーブルと Orders テーブルが表示されます。

LookupBox コントロールを使用するように Orders テーブルの [CustomerID] 列を設定する

[データ ソース] ウィンドウでは、フォームにコントロールをドラッグする前に作成するコントロールを設定できます。

[CustomerID] 列を LookupBox コントロールにバインドするように設定するには

  1. デザイナーで Form1 を開きます。

  2. [データ ソース] ウィンドウの [Customers] ノードを展開します。

  3. [Fax] 列の下の [Customers] 列にある [Orders] ノードを展開します。

  4. [Orders] ノードのドロップダウン矢印をクリックし、コントロール一覧の [Details] を選択します。

  5. [Orders] ノードの [CustomerID] 列のドロップダウン矢印をクリックし、[Customize] をクリックします。

  6. [データ UI カスタマイズ オプション] ダイアログ ボックスの [関連付けられたコントロール] の一覧の [LookupBox] を選択します。

  7. [OK] をクリックします。

  8. [CustomerID] 列のドロップダウン矢印をクリックし、[LookupBox] をクリックします。

フォームへのコントロールの追加

[データ ソース] ウィンドウから Form1 に項目をドラッグして、データ バインディング コントロールを作成します。

Windows フォームにデータ バインディング コントロールを作成するには

  • [データ ソース] ウィンドウから Windows フォームに [Orders] ノードをドラッグし、LookupBox コントロールを使用して CustomerID 列にデータが表示されていることを確認します。

Customers テーブルから CompanyName を検索するためにコントロールをバインドする

検索バインドをセットアップするには

  • [データ ソース] ウィンドウでメインの [Customers] ノードを選択し、Form1CustomerIDLookupBox 内のコンボ ボックスにドラッグします。

    これによって、Orders テーブルの CustomerID 値を維持しながら、Customers テーブルの CompanyName を表示するためのデータ バインディングがセットアップされます。 詳細については、「方法: Windows フォーム アプリケーションでルックアップ テーブルを作成する」を参照してください。

アプリケーションの実行

アプリケーションを実行するには

  • F5 キーを押してアプリケーションを実行します。

  • レコード間を移動し、LookupBox コントロールに CompanyName が表示されることを確認します。

参照

[データ ソース] ウィンドウからドラッグしたときに作成されるコントロールを設定する
Visual Studio でのデータへの Windows フォーム コントロールのバインド
Visual Studio でのデータへの接続
アプリケーションでデータを受け取る準備
アプリケーションへのデータのフェッチ
Visual Studio でのデータへのコントロールのバインド
アプリケーションでのデータ編集
データの検証
データの保存