チュートリアル: Windows フォーム間でのデータの受け渡し
ここでは、データをフォーム間で受け渡す方法の詳細な手順について説明します。Northwind の顧客テーブルと注文テーブルを使って、1 つのフォームで顧客を選択し、選択された顧客の注文がもう 1 つのフォームに表示されるようにします。ここでは、最初のフォームからデータを受け取るもう 1 つのフォームにメソッドを作成する方法を示します。
[!メモ]
ここで説明するのは、フォーム間でデータを渡す方法の 1 つにすぎません。フォームにデータを渡す他の方法として、データを受け取る 2 番目のコンストラクターを作成する方法や、最初のフォームからのデータで設定できるパブリック プロパティを作成する方法もあります。
このチュートリアルでは、以下のタスクを行います。
新しい Windows アプリケーション プロジェクトを作成します。
データ ソース構成ウィザードを使用して、データセットを作成して構成します。
[データ ソース] ウィンドウから項目をドラッグしたときにフォーム上に作成するコントロールを選択します。詳細については、「方法 : [データ ソース] ウィンドウからドラッグしたときに作成されるコントロールを設定する」を参照してください。
[データ ソース] ウィンドウからフォームに項目をドラッグして、データ バインド コントロールを作成します。
データを表示するグリッドのある 2 番目のフォームを作成します。
特定の顧客の注文をフェッチする TableAdapter クエリを作成します。
フォーム間でデータを渡します。
必須コンポーネント
このチュートリアルを完了するための要件は次のとおりです。
- Northwind サンプル データベースにアクセスします。詳細については、「方法 : サンプル データベースをインストールする」を参照してください。
Windows アプリケーションの作成
新しい Windows プロジェクトを作成するには
[ファイル] メニューで新しいプロジェクトを作成します。
プロジェクトに PassingDataBetweenForms という名前を付けます。
[Windows フォーム アプリケーション] をクリックし、[OK] をクリックします。詳細については、「クライアント アプリケーションの開発」を参照してください。
PassingDataBetweenForms プロジェクトが作成されてソリューション エクスプローラーに追加されます。
データ ソースの作成
データ ソースを作成するには
[データ] メニューの [データ ソースの表示] をクリックします。
[データ ソース] ウィンドウで、[新しいデータ ソースの追加] をクリックしてデータ ソース構成ウィザードを起動します。
[データソースの種類を選択] ページで、[データベース] をクリックし、[次へ] をクリックします。
[データベース モデルの選択] ページで、[データセット] が指定されていることを確認し、[次へ] をクリックします。
[データ接続の選択] ページで、次のいずれかの操作を行います。
Northwind サンプル データベースへのデータ接続がドロップダウン リストに表示されている場合は選択します。
または
[新しい接続] を選択して [接続の追加] または [接続の変更] ダイアログ ボックスを表示します。詳細については、「[接続の追加] ダイアログ ボックスと [接続の変更] ダイアログ ボックス (一般)」を参照してください。
データベースにパスワードが必要であり、重要情報を含めるオプションを有効にする場合は、このオプションを選択し、[次へ] をクリックします。
[アプリケーション構成ファイルに接続文字列を保存] ページで、[次へ] をクリックします。
[データベース オブジェクトの選択] ページの [テーブル] ノードを展開します。
Customers テーブルと Orders テーブルを選択し、[完了] をクリックします。
プロジェクトに NorthwindDataSet が追加され、[データ ソース] ウィンドウに Customers テーブルと Orders テーブルが表示されます。
最初のフォーム (Form1) の作成
[データ ソース] ウィンドウから [Customers] ノードをフォームにドラッグして、データ バインド グリッド (DataGridView コントロール) を作成します。
フォームにデータ バインド グリッドを作成するには
[データ ソース] ウィンドウから Form1 にメインの [Customers] ノードをドラッグします。
DataGridView と、レコード間を移動するためのツール ストリップ (BindingNavigator) が Form1 上に表示されます。NorthwindDataSet、CustomersTableAdapter、BindingSource、および BindingNavigator がコンポーネント トレイに表示されます。
2 番目のフォーム (Form2) の作成
データの渡し先となる 2 番目のフォームを作成するには
[プロジェクト] メニューの [Windows フォームの追加] をクリックします。
名前を既定の Form2 のままにして、[追加] をクリックします。
[データ ソース] ウィンドウから Form2 にメインの [Orders] ノードをドラッグします。
DataGridView と、レコード間を移動するためのツール ストリップ (BindingNavigator) が Form2 上に表示されます。NorthwindDataSet、CustomersTableAdapter、BindingSource、および BindingNavigator がコンポーネント トレイに表示されます。
コンポーネント トレイから OrdersBindingNavigator を削除します。
Form2 から OrdersBindingNavigator が消えます。
Form1 で選択した顧客の注文を読み込む TableAdapter クエリの Form2 への追加
TableAdapter クエリを作成するには
ソリューション エクスプローラーで NorthwindDataSet.xsd ファイルをダブルクリックします。
[OrdersTableAdapter] を右クリックし、[クエリの追加] を選択します。
[SQL ステートメントを使用する] を既定のオプションのままにして、[次へ] をクリックします。
[複数行を返す SELECT] を既定のオプションのままにして、[次へ] をクリックします。
CustomerID に基づいて Orders を返すために、クエリに WHERE 句を追加します。クエリは次のようになります。
SELECT OrderID, CustomerID, EmployeeID, OrderDate, RequiredDate, ShippedDate, ShipVia, Freight, ShipName, ShipAddress, ShipCity, ShipRegion, ShipPostalCode, ShipCountry FROM Orders WHERE CustomerID = @CustomerID
[!メモ]
データベース用のパラメーター構文が正しいことを確認してください。たとえば、Microsoft Access では、WHERE 句は WHERE CustomerID = ? のようになります。
[次へ] をクリックします。
[DataTable にデータを格納する] の [メソッド名] に「FillByCustomerID」と入力します。
[DataTable を返す] オプションの選択を解除し、[次へ] をクリックします。
[完了] をクリックします。
データの渡し先となる Form2 のメソッドの作成
データの渡し先のメソッドを作成するには
Form2 を右クリックし、[コードの表示] を選択して、コード エディターで Form2 を開きます。
Form2 の Form2_Load メソッドの後に次のコードを追加します。
Friend Sub LoadOrders(ByVal CustomerID As String) OrdersTableAdapter.FillByCustomerID(NorthwindDataSet.Orders, CustomerID) End Sub
internal void LoadOrders(String CustomerID) { ordersTableAdapter.FillByCustomerID(northwindDataSet.Orders, CustomerID); }
データを渡し Form2 を表示する Form1 のメソッドの作成
Form2 にデータを渡すメソッドを作成するには
Form1 の Customer データ グリッドを右クリックし、[プロパティ] をクリックします。
[プロパティ] ウィンドウ ツール バーの [イベント] をクリックします。
CellDoubleClick イベントをダブルクリックします。
コード エディターが表示されます。
メソッド定義を次のサンプルのように更新します。
Private Sub CustomersDataGridView_DoubleClick() Handles CustomersDataGridView.DoubleClick Dim SelectedRowView As Data.DataRowView Dim SelectedRow As NorthwindDataSet.CustomersRow SelectedRowView = CType(CustomersBindingSource.Current, System.Data.DataRowView) SelectedRow = CType(SelectedRowView.Row, NorthwindDataSet.CustomersRow) Dim OrdersForm As New Form2 OrdersForm.LoadOrders(SelectedRow.CustomerID) OrdersForm.Show() End Sub
private void customersDataGridView_DoubleClick(object sender, EventArgs e) { System.Data.DataRowView SelectedRowView; NorthwindDataSet.CustomersRow SelectedRow; SelectedRowView = (System.Data.DataRowView)customersBindingSource.Current; SelectedRow = (NorthwindDataSet.CustomersRow)SelectedRowView.Row; Form2 OrdersForm = new Form2(); OrdersForm.LoadOrders(SelectedRow.CustomerID); OrdersForm.Show(); }
アプリケーションの実行
アプリケーションを実行するには
F5 キーを押してアプリケーションを実行します。
Form1 で顧客レコードをダブルクリックして、その顧客の注文を表示する Form2 を開きます。
次の手順
フォーム間でデータを渡した後に、アプリケーションの要件に応じてさらに操作を追加して実行できます。このチュートリアルで行うことができる拡張には次のものがあります。
データセットを編集し、データベース オブジェクトの追加または削除を行います。詳細については、「方法 : データセットを編集する」を参照してください。
データベースにデータを保存する機能を追加します。詳細については、「方法 : データセットの変更をデータベースに保存する」を参照してください。
参照
概念
Visual Studio でのデータへの Windows フォーム コントロールのバインド
Visual Studio でのデータへのコントロールのバインド