注
DataSet クラスと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、2000 年代初頭のレガシ .NET Framework テクノロジです。 このテクノロジは、ユーザーがデータを変更し、変更をデータベースに保持できるアプリに特に役立ちます。 データセットは実証済みの成功したテクノロジですが、新しい .NET アプリケーションには Entity Framework Core を使用することをお勧めします。 Entity Framework は、オブジェクト モデルとして表形式データを操作するより自然な方法を提供し、よりシンプルなプログラミング インターフェイスを備えています。
このチュートリアルでは、フォーム間でデータを渡す手順について説明します。 Northwind サンプル データベースの Customers テーブルと Orders テーブルを使用すると、1 つのフォームでユーザーが顧客を選択でき、2 つ目のフォームに選択した顧客の注文が表示されます。 このチュートリアルでは、最初のフォームからデータを受け取る 2 番目のフォームでメソッドを作成する方法について説明します。
このチュートリアルでは、次のタスクを実行します。
- 新しい Windows フォーム アプリ (.NET Framework) プロジェクトを 作成します。
- データ ソース構成ウィザードを使用してデータセットを作成および構成します。
- [ データ ソース] ウィンドウから項目をドラッグするときに、フォームに作成するコントロールを選択します。 詳細については、「 データ ソース」ウィンドウからドラッグするときに作成するコントロールを設定するを参照してください。
- データ ソース ウィンドウからフォームに項目をドラッグして、データ バインド コントロールを作成します。
- データを表示するグリッドを使用して 2 つ目のフォームを作成します。
- 特定の顧客の注文をフェッチする
TableAdapterクエリを作成します。 - フォーム間でデータを渡します。
注
このチュートリアルでは、フォーム間でデータを渡す方法を 1 つだけ示します。 データを受け取る 2 番目のコンストラクターの作成や、最初のフォームのデータで設定できるパブリック プロパティの作成など、フォームにデータを渡すための他のオプションがあります。
[前提条件]
Visual Studio にインストールされている .NET デスクトップ開発およびデータ ストレージと処理ワークロード。 インストールするには、 Visual Studio インストーラー を開き、使用する Visual Studio のバージョンの横にある [変更] または [ その他>Modify] を選択します。 詳細については、「 Visual Studio の変更」を参照してください。
SQL Server Express 2019 LocalDB は、SQL Server のダウンロード ページから、またはデータ ストレージと処理ワークロードの一部として Visual Studio インストーラーを使用してインストールされます。
Northwind サンプル データベース。次の手順に従って作成されます。
Visual Studio で、[表示] メニューから SQL Server オブジェクト エクスプローラー ウィンドウを選択して開きます。 SQL Server オブジェクト エクスプローラーは、 データ ストレージと処理 ワークロードの一部としてインストールされます。
SQL Server ノードを展開し、LocalDB インスタンスを右クリックし、[新しいクエリ] を選択してクエリ エディター ウィンドウを開きます。
Northwind Transact-SQL スクリプトをクリップボードにコピーします。 この T-SQL スクリプトは、Northwind データベースを作成し、データを設定します。
T-SQL スクリプトをクエリ エディターに貼り付け、ウィンドウの上部にある [実行 ] を選択して Northwind データベースを作成します。
Windows フォーム アプリ プロジェクトを作成する
Visual Studio の [ファイル] メニューで、 [新規作成]>[プロジェクト] を選択します。
[すべての言語] ドロップダウン リストから C# または Visual Basic を選択し、[すべてのプラットフォーム] ドロップダウン リストから Windows を選択し、[すべてのプロジェクトの種類] リストから [デスクトップ] を選択します。
プロジェクト テンプレートの一覧から Windows フォーム アプリ (.NET Framework) を選択し、[ 次へ] を選択します。
PassingDataBetweenForms プロジェクトに名前を付け、[次へ] を選択して、[作成] を選択します。
PassingDataBetweenForms プロジェクトが作成され、ソリューション エクスプローラーに追加されます。 Form1 のデザイナー ビューがエディターに表示されます。
データ ソースの作成
Visual Studio メニューの [プロジェクト>新しいデータ ソースの追加] を選択して、[データ ソース] ウィンドウを開きます。
[ データ ソース ] ウィンドウで、[ 新しいデータ ソースの追加 ] を選択して、 データ ソース構成 ウィザードを開始します。
[ データ ソースの種類の選択 ] ページで、[ データベース] を選択し、[ 次へ] を選択します。
[ データベース モデルの選択 ] ページで、 データセット が指定されていることを確認し、[ 次へ] を選択します。
[ データ接続の選択 ] ページで、Northwind サンプル データベースへのデータ接続が既に使用可能な場合は、それを選択し、[ データベース オブジェクトの選択] ステップに進みます。 接続済みの接続を選択しなかった場合は、 [新しい接続] を選択します。
[ データ ソースの選択 ] 画面で、[ Microsoft SQL Server データベース ファイル] を選択し、[ 続行] を選択します。
[ 接続の追加 ] 画面で、[ 参照] を選択し、 northwnd.mdf ファイルを参照して選択し、[ 開く] を選択します。
[Windows 認証] を選択するか、[SQL Server 認証] を選択し、データベースにアクセスするためのユーザー名とパスワードを指定します。
[テスト接続] を選んで接続をテストします。 接続が成功したら、[ OK] を選択します。
[ データ接続の選択 ] ページで、データベース ファイルが表示されていることを確認し、[ 次へ] を選択します。
ポップアップの質問で [いいえ ] を選択します 。ファイルをプロジェクトにコピーして接続を変更しますか?
[ アプリケーション構成ファイルへの接続文字列の保存] ページで、[ はい] を選択します。 接続に NorthwindConnectionString という名前を付け、[ 次へ] を選択します。
[ データベース オブジェクトの選択 ] ページで、[ テーブル ] ノードを展開し、[ 顧客 と 注文 ] テーブルを選択し、データセットに NorthwindDataSet という名前を付け、[ 完了] を選択します。
NorthwindDataSet がプロジェクトに追加され、Customers テーブルと Orders テーブルが [データ ソース] ウィンドウに表示されます。
最初のフォームにデータを入力する
データ バインド グリッドを作成するには、[データ ソース] ウィンドウから Form1 に [顧客] ノードをドラッグします。
DataGridView コントロールとレコード内を移動するためのBindingNavigator ツール ストリップが Form1 に表示されます。 NorthwindDataSet、
CustomersTableAdapter、BindingSource、およびBindingNavigatorがコンポーネント トレイに表示されます。
2 番目のフォームを作成する
データを渡す 2 つ目のフォームを作成します。
[プロジェクト] メニューの [フォームの追加 ] (Windows フォーム) を選択します。
既定の Form2 名のままにして、[追加] を選択します。
メインの Orders ノードを [ データ ソース] ウィンドウから Form2 にドラッグします。
レコード内を移動するための DataGridView と BindingNavigator ツール ストリップが Form2 に表示されます。 NorthwindDataSet、
CustomersTableAdapter、BindingSource、およびBindingNavigatorがコンポーネント トレイに表示されます。コンポーネント トレイから OrdersBindingNavigator を削除します。 BindingNavigator がForm2 から消えます。
TableAdapter クエリを追加する
Form1 で選択した顧客の注文を読み込む TableAdapter クエリを Form2 に追加します。
ソリューション エクスプローラーで NorthwindDataSet.xsd ファイルをダブルクリックします。
Orders テーブルで OrdersTableAdapter を右クリックし、[追加>Query] を選択します。
[ SQL ステートメントを使用 する] の既定のオプションのままにして、[ 次へ] を選択します。
行を返す SELECT の既定のオプションのままにして、[次へ] を選択します。
テーブルを読み込む必要があるデータで、
Ordersに基づいてCustomerIDを返すには、クエリの末尾にWHERE句を追加します。 最終的なクエリは、次のコードのようになります。SELECT OrderID, CustomerID, 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メソッドの内容を削除し、Form2_Loadメソッドの後に次のコードを追加します。
internal void LoadOrders(String CustomerID)
{
ordersTableAdapter.FillByCustomerID(northwindDataSet.Orders, CustomerID);
}
Form1 でデータを渡して Form2 を表示するメソッドを作成する
Form1 のデザイナー ビューで、[顧客データ] グリッドを右クリックし、[プロパティ] を選択します。
[ プロパティ ] ウィンドウで、上部のツール バーの [イベント ] アイコンを選択します。
DoubleClick イベントをダブルクリックして、コード エディターを開きます。
コード エディターで、次のサンプルに一致するようにメソッド定義を更新します。
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 を開きます。
次のステップ
アプリケーションの要件に応じて、フォーム間でデータを渡した後、いくつかの手順を実行できます。 このチュートリアルでは、次のような機能強化を行うことができます。
データベース オブジェクトを追加または削除するためのデータセットの編集。 詳細については、「データセットの 作成と構成」を参照してください。
データをデータベースに保存する機能を追加しました。 詳細については、「 データをデータベースに保存する」を参照してください。
関連コンテンツ
- Windows フォーム コントロールを Visual Studio のデータにバインドする