チュートリアル: Windows フォーム間でのデータの受け渡し
公開日: 2016年4月
このチュートリアルでは、フォーム間でデータを渡す手順について説明します。 Northwind の Customers テーブルと Orders テーブルを使用して、1 つのフォームで顧客を選択し、選択した顧客の注文が 2 番目のフォームで表示されるようにします。 このチュートリアルでは、最初のフォームからデータを受け取るもう 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
メソッドの後に次のコードを追加します。internal void LoadOrders(String CustomerID) { ordersTableAdapter.FillByCustomerID(northwindDataSet.Orders, CustomerID); }
Friend Sub LoadOrders(ByVal CustomerID As String) OrdersTableAdapter.FillByCustomerID(NorthwindDataSet.Orders, CustomerID) End Sub
データを渡し Form2 を表示する Form1 のメソッドの作成
Form2 にデータを渡すメソッドを作成するには
Form1 の Customer データ グリッドを右クリックし、[プロパティ] をクリックします。
[プロパティ] ウィンドウで、[イベント] をクリックします。
CellDoubleClick イベントをダブルクリックします。
コード エディターが表示されます。
メソッド定義を次のサンプルのように更新します。
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(); }
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
アプリケーションを実行する
アプリケーションを実行するには
F5 キーを押してアプリケーションを実行します。
Form1 で顧客レコードをダブルクリックして、その顧客の注文を表示する Form2 を開きます。
次の手順
フォーム間でデータを渡した後に、アプリケーションの要件に応じてさらに操作を追加して実行できます。 このチュートリアルで行うことができる拡張には次のものがあります。
データセットを編集し、データベース オブジェクトの追加または削除を行います。 詳細については、「方法 : データセットを編集する」を参照してください。
データベースにデータを戻して保存する機能を追加します。 詳細については、「方法 : データセットの変更をデータベースに保存する」を参照してください。
参照
データに関するチュートリアル
Visual Studio でのデータへの Windows フォーム コントロールのバインド
データ ソースの概要
TableAdapter の概要
Visual Studio でのデータへの接続
アプリケーションでデータを受け取る準備
アプリケーションへのデータのフェッチ
Visual Studio でのデータへのコントロールのバインド
アプリケーションでのデータ編集
データの検証
データの保存