検索データ バインディングをサポートする .NET Framework Windows フォーム ユーザー コントロールを作成する
Note
データセットと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、2000 年代初期からのレガシ .NET Framework テクノロジです。 テクノロジが特に役立つのは、ユーザーがデータを変更し、変更をデータベースに戻して保持できるようにするアプリケーションです。 データセットは非常に優れたテクノロジであることが証明されていますが、新しい .NET アプリケーションでは Entity Framework Core を使用することをお勧めしています。 Entity Framework には、オブジェクト モデルとして表形式データを操作する、より自然な方法が用意されており、よりシンプルなプログラミング インターフェイスが備わっています。
フォームにデータを表示する場合は、ツールボックスから既存のコントロールを選択するか、またはアプリケーションが標準コントロールでは提供できない機能を必要とする場合は、カスタム コントロールを記述できます。 このチュートリアルでは、LookupBindingPropertiesAttribute を実装するコントロールを作成する方法を示します。 LookupBindingPropertiesAttribute を実装するコントロールには、データにバインドできるプロパティを 3 つ含めることができます。 このようなコントロールは、ComboBox に似ています。
コントロール作成の詳細については、デザイン時の Windows フォーム コントロールの開発に関するページを参照してください。
データ バインディングのシナリオで使用するためのコントロールを作成するときは、次のいずれかのデータ バインド属性を実装する必要があります。
データ バインディング属性の使用 |
---|
単一のデータ列またはプロパティを表示する DefaultBindingPropertyAttribute のような TextBox を簡単なコントロールに実装します。 詳細については、「単純なデータ バインディングをサポートする Windows フォーム ユーザー コントロールの作成」を参照してください。 |
データの一覧またはテーブルを表示する ComplexBindingPropertiesAttribute のような DataGridView をコントロールに実装します。 詳細については、「複合データ バインディングをサポートする Windows フォーム ユーザー コントロールの作成」を参照してください。 |
データの一覧またはテーブルを表示しますが、単一の列またはプロパティを表示する必要もある LookupBindingPropertiesAttribute のような ComboBox をコントロールに実装します。 このチュートリアルでは、このプロセスについて説明します。 |
このチュートリアルでは、2 つのテーブルのデータにバインドする検索コントロールを作成します。 この例では、Northwind サンプル データベースの Customers
テーブルと Orders
テーブルを使用します。 検索コントロールは Orders
テーブルの CustomerID
フィールドにバインドされます。 この値を使用して、Customers
テーブルから CompanyName
が検索されます。
このチュートリアルでは、次の作業を行う方法について説明します。
新しい Windows フォーム アプリ (.NET Framework) を作成します。
新しいユーザー コントロールをプロジェクトに追加します。
ユーザー コントロールをビジュアルに設計します。
LookupBindingProperty
属性を実装します。データ ソース構成ウィザードを使用してデータセットを作成します。
[データ ソース] ウィンドウで Orders テーブルの [CustomerID] 列が新しいコントロールを使用するように設定します。
フォームを作成して、新しいコントロールにデータを表示します。
前提条件
このチュートリアルを完了するには、Visual Studio にインストールされている .NET デスクトップ開発とデータの保存と処理のワークロードが必要です。 これらをインストールするには、Visual Studio インストーラーを開き、変更する Visual Studio のバージョンの横にある [変更] (または [その他]>[変更] ) を選択します。 Visual Studio の変更に関するページを参照してください。
このチュートリアルでは SQL Server Express LocalDB と Northwind サンプル データベースを使用します。
SQL Server Express LocalDB がない場合は、SQL Server Express のダウンロード ページからインストールするか、Visual Studio インストーラーを使用してインストールします。 Visual Studio インストーラーでは、データ ストレージとデータ処理ワークロードの一部として、または個別のコンポーネントとして、SQL Server Express LocalDB をインストールできます。
次の手順に従って、Northwind サンプル データベースをインストールします。
Visual Studio で、 [SQL Server オブジェクト エクスプローラー] ウィンドウを開きます。 (SQL Server オブジェクト エクスプローラーは、Visual Studio インストーラーのデータ ストレージとデータ処理ワークロードの一部としてインストールされます)。 [SQL Server] ノードを展開します。 LocalDB インスタンスを右クリックし、 [新しいクエリ] を選択します。
クエリ エディター ウィンドウが開きます。
Northwind Transact-SQL スクリプトをクリップボードにコピーします。 この T-SQL スクリプトを使用すると、Northwind データベースが新規作成され、データが設定されます。
T-SQL スクリプトをクエリ エディターに貼り付け、 [実行] ボタンを選択します。
しばらくすると、クエリの実行が完了し、Northwind データベースが作成されます。
Windows フォーム アプリ プロジェクトを作成する
最初の手順は、Windows フォーム アプリ (.NET Framework) プロジェクトを作成することです。
Visual Studio の [ファイル] メニューで、 [新規作成]>[プロジェクト] を選択します。
左側のペインで [Visual C#] または [Visual Basic] を展開し、 [Windows デスクトップ] を選択します。
中央のペインで、 [Windows フォーム アプリ] プロジェクト タイプを選択します。
プロジェクトに LookupControlWalkthrough という名前を付け、 [OK] を選択します。
LookupControlWalkthrough プロジェクトが作成されてソリューション エクスプローラーに追加されます。
プロジェクトにユーザー コントロールを追加する
このチュートリアルではユーザー コントロールから検索コントロールを作成するので、ユーザー コントロールの項目を LookupControlWalkthrough プロジェクトに追加します。
[プロジェクト] メニューの [ユーザー コントロールの追加] をクリックします。
[名前] エリアに「
LookupBox
」と入力し、[追加] を選択します。LookupBox コントロールが ソリューション エクスプローラーに追加され、デザイナーが開きます。
LookupBox コントロールの設計
LookupBox コントロールを設計するには、ツールボックスからユーザー コントロールのデザイン サーフェイスに、ComboBox をドラッグします。
必要なデータ バインディング属性の追加
データ バインディングをサポートする検索コントロールには、LookupBindingPropertiesAttribute を実装できます。
LookupBox コントロールをコード ビューに切り替えます。 ([表示] メニューの [コード] を選択します。)
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(); } } }
[ビルド] メニューの [ソリューションのビルド] をクリックします。
データベースからのデータ ソースの作成
この手順では、データ ソース構成ウィザードを使用して、Northwind サンプル データベースの Customers
テーブルと Orders
テーブルに基づいてデータ ソースを作成します。
[データ ソース] ウィンドウを開くには、 [データ] メニューの [データ ソースの表示] をクリックします。
[データ ソース] ウィンドウで、[新しいデータ ソースの追加] をクリックしてデータ ソース構成ウィザードを起動します。
[データ ソースの種類の選択] ページで、 [データベース] を選択し、 [次へ] を選択します。
[データ接続の選択] ページで、次のいずれかの操作を行います。
Northwind サンプル データベースへのデータ接続がドロップダウン リストに表示されている場合は選択します。
[新しい接続] を選択して [接続の追加] または [接続の変更] ダイアログ ボックスを表示します。
データベースにパスワードが必要な場合は、該当するオプションを選択して重要情報を含め、 [次へ] を選択します。
[アプリケーション構成ファイルに接続文字列を保存] ページで、[次へ] をクリックします。
[データベース オブジェクトの選択] ページで、[テーブル] ノードを展開します。
Customers
テーブルとOrders
テーブルを選択し、 [完了] を選択します。プロジェクトに NorthwindDataSet が追加され、[データ ソース] ウィンドウに
Customers
テーブルとOrders
テーブルが表示されます。
LookupBox コントロールを使用するように Orders テーブルの [CustomerID] 列を設定する
[データ ソース] ウィンドウでは、フォームにコントロールをドラッグする前に作成するコントロールを設定できます。
デザイナーで Form1 を開きます。
[データ ソース] ウィンドウの [Customers] ノードを展開します。
[Fax] 列の下の [Customers] 列にある [Orders] ノードを展開します。
[Orders] ノードのドロップダウン リスト矢印をクリックし、コントロール一覧の [Details] を選択します。
[Orders] ノードの [CustomerID] 列のドロップダウン リスト矢印をクリックし、[Customize] をクリックします。
[データ UI カスタマイズ オプション] ダイアログ ボックスの [関連付けられたコントロール] の一覧の [LookupBox] を選択します。
OK をクリックします。
[CustomerID] 列のドロップダウン リスト矢印をクリックし、[LookupBox] をクリックします。
コントロールをフォームに追加する
[データ ソース] ウィンドウから Form1 に項目をドラッグして、データ バインディング コントロールを作成します。
Windows フォームにデータ バインド コントロールを作成するには、 [データ ソース] ウィンドウから Windows フォームに [Orders] ノードをドラッグし、LookupBox コントロールを使用して CustomerID
列にデータが表示されることを確認します。
Customers テーブルから CompanyName を検索するためにコントロールをバインドする
検索バインドを設定するには、 [データ ソース] ウィンドウでメインの [Customers] ノードを選択し、Form1 の CustomerIDLookupBox 内のコンボ ボックスにドラッグします。
これによって、Orders
テーブルの CustomerID
値を維持しながら、Customers
テーブルの CompanyName
を表示するためのデータ バインディングがセットアップされます。
アプリケーションの実行
F5 キーを押してアプリケーションを実行します。
レコード間を移動し、
LookupBox
コントロールにCompanyName
が表示されることを確認します。