次の方法で共有


フォーム間でデータを渡す

データセットと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、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 サンプル データベース。次の手順に従って作成されます。

    1. Visual Studio で、[表示] メニューから SQL Server オブジェクト エクスプローラー ウィンドウを選択して開きます。 SQL Server オブジェクト エクスプローラーは、 データ ストレージと処理 ワークロードの一部としてインストールされます。

    2. SQL Server ノードを展開し、LocalDB インスタンスを右クリックし、[新しいクエリ] を選択してクエリ エディター ウィンドウを開きます。

    3. Northwind Transact-SQL スクリプトをクリップボードにコピーします。 この T-SQL スクリプトは、Northwind データベースを作成し、データを設定します。

    4. T-SQL スクリプトをクエリ エディターに貼り付け、ウィンドウの上部にある [実行 ] を選択して Northwind データベースを作成します。

Windows フォーム アプリ プロジェクトを作成する

  1. Visual Studio の [ファイル] メニューで、 [新規作成]>[プロジェクト] を選択します。

  2. [すべての言語] ドロップダウン リストから C# または Visual Basic を選択し、[すべてのプラットフォーム] ドロップダウン リストから Windows を選択し、[すべてのプロジェクトの種類] リストから [デスクトップ] を選択します。

  3. プロジェクト テンプレートの一覧から Windows フォーム アプリ (.NET Framework) を選択し、[ 次へ] を選択します。

  4. PassingDataBetweenForms プロジェクトに名前を付け、[次へ] を選択して、[作成] を選択します。

PassingDataBetweenForms プロジェクトが作成され、ソリューション エクスプローラーに追加されます。 Form1 のデザイナー ビューがエディターに表示されます。

データ ソースの作成

  1. Visual Studio メニューの [プロジェクト>新しいデータ ソースの追加] を選択して、[データ ソース] ウィンドウを開きます。

  2. [ データ ソース ] ウィンドウで、[ 新しいデータ ソースの追加 ] を選択して、 データ ソース構成 ウィザードを開始します。

  3. [ データ ソースの種類の選択 ] ページで、[ データベース] を選択し、[ 次へ] を選択します。

  4. [ データベース モデルの選択 ] ページで、 データセット が指定されていることを確認し、[ 次へ] を選択します。

  5. [ データ接続の選択 ] ページで、Northwind サンプル データベースへのデータ接続が既に使用可能な場合は、それを選択し、[ データベース オブジェクトの選択] ステップに進みます。 接続済みの接続を選択しなかった場合は、 [新しい接続] を選択します。

  6. [ データ ソースの選択 ] 画面で、[ Microsoft SQL Server データベース ファイル] を選択し、[ 続行] を選択します。

  7. [ 接続の追加 ] 画面で、[ 参照] を選択し、 northwnd.mdf ファイルを参照して選択し、[ 開く] を選択します。

  8. [Windows 認証] を選択するか、[SQL Server 認証] を選択し、データベースにアクセスするためのユーザー名とパスワードを指定します。

  9. [テスト接続] を選んで接続をテストします。 接続が成功したら、[ OK] を選択します

  10. [ データ接続の選択 ] ページで、データベース ファイルが表示されていることを確認し、[ 次へ] を選択します。

  11. ポップアップの質問で [いいえ ] を選択します 。ファイルをプロジェクトにコピーして接続を変更しますか?

  12. [ アプリケーション構成ファイルへの接続文字列の保存] ページで、[ はい] を選択します。 接続に NorthwindConnectionString という名前を付け、[ 次へ] を選択します。

  13. [ データベース オブジェクトの選択 ] ページで、[ テーブル ] ノードを展開し、[ 顧客注文 ] テーブルを選択し、データセットに NorthwindDataSet という名前を付け、[ 完了] を選択します。

NorthwindDataSet がプロジェクトに追加され、Customers テーブルと Orders テーブルが [データ ソース] ウィンドウに表示されます。

最初のフォームにデータを入力する

  • データ バインド グリッドを作成するには、[データ ソース] ウィンドウから Form1[顧客] ノードをドラッグします。

    DataGridView コントロールとレコード内を移動するためのBindingNavigator ツール ストリップが Form1 に表示されます。 NorthwindDataSetCustomersTableAdapterBindingSource、およびBindingNavigatorがコンポーネント トレイに表示されます。

2 番目のフォームを作成する

データを渡す 2 つ目のフォームを作成します。

  1. [プロジェクト] メニューの [フォームの追加 ] (Windows フォーム) を選択します。

  2. 既定の Form2 名のままにして、[追加] を選択します

  3. メインの Orders ノードを [ データ ソース] ウィンドウから Form2 にドラッグします。

    レコード内を移動するための DataGridViewBindingNavigator ツール ストリップが Form2 に表示されます。 NorthwindDataSetCustomersTableAdapterBindingSource、およびBindingNavigatorがコンポーネント トレイに表示されます。

  4. コンポーネント トレイから OrdersBindingNavigator を削除します。 BindingNavigator がForm2 から消えます。

TableAdapter クエリを追加する

Form1 で選択した顧客の注文を読み込む TableAdapter クエリを Form2 に追加します。

  1. ソリューション エクスプローラーNorthwindDataSet.xsd ファイルをダブルクリックします。

  2. Orders テーブルで OrdersTableAdapter を右クリックし、[追加>Query] を選択します。

  3. [ SQL ステートメントを使用 する] の既定のオプションのままにして、[ 次へ] を選択します。

  4. 行を返す SELECT の既定のオプションのままにして、[次へ] を選択します。

  5. テーブルを読み込む必要があるデータで、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 = ?のようになります。

  6. [次へ] を選択します。

  7. 生成するメソッドの選択画面で、DataTable を埋めるを選択し、FillByCustomerIDと入力します。

  8. [ DataTable を返す ] オプションの選択を解除し、[ 完了] を選択します。

Form2 でデータを渡すメソッドを作成する

  1. Form2 で右クリックし、[コードの表示] を選択して、エディターで Form2 コードを開きます。

  2. Form2 コードで、Form2_Load メソッドの内容を削除し、Form2_Load メソッドの後に次のコードを追加します。

internal void LoadOrders(String CustomerID)
{
    ordersTableAdapter.FillByCustomerID(northwindDataSet.Orders, CustomerID);
}

Form1 でデータを渡して Form2 を表示するメソッドを作成する

  1. Form1 のデザイナー ビューで、[顧客データ] グリッドを右クリックし、[プロパティ] を選択します。

  2. [ プロパティ ] ウィンドウで、上部のツール バーの [イベント ] アイコンを選択します。

  3. DoubleClick イベントをダブルクリックして、コード エディターを開きます。

  4. コード エディターで、次のサンプルに一致するようにメソッド定義を更新します。

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();
}

アプリを実行してテストする

  1. F5 押して、アプリケーションを実行します。

  2. アプリケーションで、 Form1 の顧客レコードをダブルクリックして、その顧客の注文を含む Form2 を開きます。

次のステップ

アプリケーションの要件に応じて、フォーム間でデータを渡した後、いくつかの手順を実行できます。 このチュートリアルでは、次のような機能強化を行うことができます。

  • データベース オブジェクトを追加または削除するためのデータセットの編集。 詳細については、「データセットの 作成と構成」を参照してください。

  • データをデータベースに保存する機能を追加しました。 詳細については、「 データをデータベースに保存する」を参照してください。