注
DataSet クラスと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、2000 年代初頭のレガシ .NET Framework テクノロジです。 このテクノロジは、ユーザーがデータを変更し、変更をデータベースに保持できるアプリに特に役立ちます。 データセットは実証済みの成功したテクノロジですが、新しい .NET アプリケーションには Entity Framework Core を使用することをお勧めします。 Entity Framework は、オブジェクト モデルとして表形式データを操作するより自然な方法を提供し、よりシンプルなプログラミング インターフェイスを備えています。
Windows フォームにデータを表示する場合は、[ ツールボックス] から既存のコントロールを選択するか、アプリケーションで標準コントロールで使用できない機能が必要な場合はカスタム コントロールを作成できます。 このチュートリアルでは、 LookupBindingPropertiesAttributeを実装するコントロールを作成する方法について説明します。 LookupBindingPropertiesAttributeを実装するコントロールには、データにバインドできる 3 つのプロパティを含めることができます。 このようなコントロールは、 ComboBoxに似ています。
コントロールの作成の詳細については、「 デザイン時の Windows フォーム コントロールの開発」を参照してください。
データ バインディング シナリオで使用するコントロールを作成する場合は、次のいずれかのデータ バインディング属性を実装する必要があります。
| データ バインディング属性の使用方法 |
|---|
| データの単一の列 (またはプロパティ) を表示するDefaultBindingPropertyAttributeなどの単純なコントロールにTextBoxを実装します。 詳細については、「 単純なデータ バインディングをサポートする Windows フォーム ユーザー コントロールを作成する」を参照してください。 |
| データのリスト (またはテーブル) を表示するComplexBindingPropertiesAttributeなどのコントロールにDataGridViewを実装します。 詳細については、「 複雑なデータ バインディングをサポートする Windows フォーム ユーザー コントロールを作成する」を参照してください。 |
| データのリスト (またはテーブル) を表示するコントロール (LookupBindingPropertiesAttribute など) にComboBoxを実装しますが、1 つの列またはプロパティも表示する必要があります。 (このプロセスについては、このチュートリアル ページで説明します)。 |
このチュートリアルでは、2 つのテーブルのデータにバインドする参照コントロールを作成します。 この例では、Northwind サンプル データベースの Customers テーブルと Orders テーブルを使用します。 ルックアップ コントロールは、CustomerID テーブルのOrders フィールドにバインドされます。 この値を使用して、CompanyName テーブルからCustomersを検索します。
このチュートリアルでは、次の方法について説明します。
新しい 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 を開きます。
[データ ソース] ウィンドウで [顧客] ノードを展開します。
[注文] ノード (FAX 列の下にある [顧客] ノードのノード) を展開します。
[ 注文 ] ノードのドロップダウン リスト矢印をクリックし、コントロール リストから [詳細 ] を選択します。
[注文] ノードの [CustomerID] 列のドロップダウン リスト矢印をクリックし、[カスタマイズ] を選択します。
[データ UI カスタマイズ オプション] ダイアログ ボックスの [関連付けられたコントロール] の一覧から LookupBox を選択します。
OK をクリックします。
CustomerID 列のドロップダウン リスト矢印をクリックし、[LookupBox] を選択します。
コントロールをフォームに追加する
データ バインド コントロールを作成するには、[データ ソース] ウィンドウから Form1 に項目をドラッグします。
Windows フォームでデータ バインド コントロールを作成するには、[データ ソース] ウィンドウから Windows フォームに Orders ノードをドラッグし、LookupBox コントロールを使用してCustomerID列にデータが表示されることを確認します。
Customers テーブルから CompanyName を検索するようにコントロールをバインドする
参照バインドを設定するには、[データ ソース] ウィンドウでメインの [顧客] ノードを選択し、Form1 の CustomerIDLookupBox のコンボ ボックスにドラッグします。
これにより、CompanyName テーブルのCustomers値を維持しながら、CustomerID テーブルのOrdersを表示するようにデータ バインディングが設定されます。
アプリケーションを実行する
F5
押して、アプリケーションを実行します。 一部のレコード間を移動し、
CompanyNameがLookupBoxコントロールに表示されることを確認します。
関連コンテンツ
- Windows フォーム コントロールを Visual Studio のデータにバインドする