次の方法で共有


.NET Framework アプリケーションのデータセットに WPF コントロールをバインドする

DataSet クラスと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、2000 年代初頭のレガシ .NET Framework テクノロジです。 このテクノロジは、ユーザーがデータを変更し、変更をデータベースに保持できるアプリに特に役立ちます。 データセットは実証済みの成功したテクノロジですが、新しい .NET アプリケーションには Entity Framework Core を使用することをお勧めします。 Entity Framework は、オブジェクト モデルとして表形式データを操作するより自然な方法を提供し、よりシンプルなプログラミング インターフェイスを備えています。

このチュートリアルでは、データ バインド コントロールを含む WPF アプリケーションを作成します。 コントロールは、データセットにカプセル化された製品レコードにバインドされます。 また、ボタンを追加して製品を参照し、製品レコードへの変更を保存します。

このチュートリアルでは、次のタスクについて説明します。

  • WPF アプリケーションと、AdventureWorksLT サンプル データベース内のデータから生成されるデータセットを作成する。

  • データ テーブルを [データ ソース] ウィンドウから WPF デザイナーのウィンドウにドラッグして、データ バインド コントロールのセットを作成する。

  • 製品レコードを前後に移動するボタンの作成。

  • ユーザーが製品レコードに加えた変更をデータ テーブルと基になるデータ ソースに保存するボタンを作成します。

この記事の手順では、Visual Studio で使用できる対話型開発エクスペリエンス (IDE) の最新バージョンについて説明します。 コンピューターには、一部のユーザー インターフェイス要素に対して異なる名前または場所が表示される場合があります。 別のバージョンの Visual Studio または異なる環境設定を使用している可能性があります。 詳細については、「IDEのカスタマイズ」を参照してください。

[前提条件]

このチュートリアルを完了するには、次のコンポーネントが必要です。

  • このチュートリアルを完了するには、Visual Studio にインストールされている .NET デスクトップ開発ワークロードとデータ ストレージワークロードと処理ワークロードが必要です。 インストールするには、Visual Studio インストーラー を開き、変更したい Visual Studio のバージョンの横にある [変更] (または [その他の >変更])を選択します。 Visual Studio の変更に関するページを参照してください。

  • AdventureWorks Light (AdventureWorksLT) サンプル データベースがアタッチされている SQL Server または SQL Server Express の実行中のインスタンスへのアクセス。 データベースをダウンロードするには、 AdventureWorks サンプル データベースを参照してください。

次の概念に関する以前の知識も役立ちますが、チュートリアルを完了する必要はありません。

プロジェクトを作成する

製品レコードを表示する新しい WPF プロジェクトを作成します。

  1. Visual Studio を開きます。

  2. スタート ウィンドウで、[新しいプロジェクト作成] を選択します。

  3. C# WPF アプリ プロジェクト テンプレートを検索し、手順に従ってプロジェクトを作成し、プロジェクト AdventureWorksProductsEditor という名前を付けます。

    Visual Studio によって AdventureWorksProductsEditor プロジェクトが作成されます。

アプリケーションのデータセットを作成する

データ バインド コントロールを作成する前に、アプリケーションのデータ モデルを定義し、[ データ ソース] ウィンドウに追加する必要があります。 このチュートリアルでは、データ モデルとして使用するデータセットを作成します。

  1. [ データ ] メニューの [ データ ソースの表示] をクリックします。

    [ データ ソース] ウィンドウが開きます。

  2. [データ ソース] ウィンドウで、 [新しいデータ ソースの追加]をクリックします。

    データ ソース構成ウィザードが開きます。

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

  4. [ データベース モデルの選択 ] ページで、[ データセット] を選択し、[ 次へ] を選択します。

  5. [ データ接続の選択 ] ページで、次のいずれかのオプションを選択します。

    • AdventureWorksLT サンプル データベースへのデータ接続がドロップダウン リストで使用できる場合は、それを選択し、[ 次へ] を選択します。

    • [ 新しい接続] をクリックし、AdventureWorksLT データベースへの接続を作成します。

  6. [ アプリケーション構成ファイルへの接続文字列の保存 ] ページで、[はい] を選択し 、[接続を名前を付けて保存 ] チェック ボックスをオンにして、[ 次へ] を選択します。

  7. [ データベース オブジェクトの選択] ページで、[ テーブル] を展開し、 Product (SalesLT) テーブルを選択します。

  8. [完了] をクリックします。

    Visual Studio によって新しい AdventureWorksLTDataSet.xsd ファイルがプロジェクトに追加され、対応する AdventureWorksLTDataSet 項目が [データ ソース ] ウィンドウに追加されます。 AdventureWorksLTDataSet.xsd ファイルは、AdventureWorksLTDataSetという名前の型指定されたデータセットと、ProductTableAdapterという名前の TableAdapter を定義します。 このチュートリアルの後半では、 ProductTableAdapter を使用してデータセットにデータを入力し、変更をデータベースに保存します。

  9. プロジェクトをビルドします。

TableAdapter の既定の塗りつぶしメソッドを編集する

データセットにデータを入力するには、ProductTableAdapterFill メソッドを使用します。 既定では、Fill メソッドは、AdventureWorksLTDataSetProductDataTableに Product テーブルのすべてのデータ行を入力します。 このメソッドを変更して、行のサブセットのみを返すことができます。 このチュートリアルでは、 Fill メソッドを変更して、写真を持つ製品の行のみを返します。

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

    データセット デザイナーが開きます。

  2. デザイナーで、 FillGetData() クエリを右クリックし、[ 構成] を選択します。

    TableAdapter 構成ウィザードが開きます。

  3. [SQL ステートメントの入力] ページで、テキスト ボックスの SELECT ステートメントの後に次のWHERE句を追加します。

    WHERE ThumbnailPhotoFileName <> 'no_image_available_small.gif'
    
  4. [完了] をクリックします。

ユーザー インターフェイスを定義する

WPF デザイナーで XAML を変更して、ウィンドウにいくつかのボタンを追加します。 このチュートリアルの後半では、これらのボタンを使用して、ユーザーがスクロールして製品レコードへの変更を保存できるようにするコードを追加します。

  1. ソリューション エクスプローラーでMainWindow.xaml をダブルクリックします。

    WPF デザイナーでウィンドウが開きます。

  2. デザイナーの XAML ビューで、 <Grid> タグの間に次のコードを追加します。

    <Grid.RowDefinitions>
        <RowDefinition Height="75" />
        <RowDefinition Height="625" />
    </Grid.RowDefinitions>
    <Button HorizontalAlignment="Left" Margin="22,20,0,24" Name="backButton" Width="75">&lt;</Button>
    <Button HorizontalAlignment="Left" Margin="116,20,0,24" Name="nextButton" Width="75">&gt;</Button>
    <Button HorizontalAlignment="Right" Margin="0,21,46,24" Name="saveButton" Width="110">Save changes</Button>
    
  3. プロジェクトをビルドします。

データ バインド コントロールを作成する

Product テーブルを [データ ソース] ウィンドウから WPF デザイナーにドラッグして、顧客レコードを表示するコントロールを作成します。

  1. [ データ ソース ] ウィンドウで、[ 製品 ] ノードのドロップダウン リスト メニューをクリックし、[詳細] を選択 します

  2. [製品] ノードを展開します。

  3. この例では、一部のフィールドは表示されないため、次のノードの横にあるドロップダウン リスト メニューをクリックし、[ なし] を選択します。

    • 製品カテゴリID

    • ProductModelID

    • サムネイル写真ファイル名

    • rowguid

    • 変更日

  4. ThumbNailPhoto ノードの横にあるドロップダウン リスト メニューをクリックし、[イメージ] を選択します。

    既定では、図を表す [ データ ソース] ウィンドウの項目の既定のコントロールは [なし] に設定されています。 これは、画像はデータベースにバイト配列として格納され、バイト配列には単純なバイト配列から大きなアプリケーションの実行可能ファイルまで、何でも含めることができるためです。

  5. [ データ ソース ] ウィンドウから、ボタンを含む行の下のグリッド行に [Product ] ノードをドラッグします。

    Visual Studio では、 Products テーブル内のデータにバインドされるコントロールのセットを定義する XAML が生成されます。 また、データを読み込むコードも生成されます。 生成された XAML とコードの詳細については、「 Visual Studio で WPF コントロールをデータにバインドする」を参照してください。

  6. デザイナーで、 製品 ID ラベルの横にあるテキスト ボックスをクリックします。

  7. [ プロパティ ] ウィンドウで、 IsReadOnly プロパティの横にあるチェック ボックスをオンにします。

<ボタンと>ボタンを使用して、ユーザーが製品レコードをスクロールできるようにするコードを追加します。

  1. デザイナーで、ウィンドウ画面の [ < ] ボタンをダブルクリックします。

    Visual Studio によってコード ビハインド ファイルが開かれ、backButton_Click イベント ハンドラーが新しい Click イベント用に作成されます。

  2. Window_Loaded イベント ハンドラーを変更して、ProductViewSourceAdventureWorksLTDataSet、およびAdventureWorksLTDataSetProductTableAdapterがメソッドの外部にあり、フォーム全体からアクセスできるようにします。 これらをフォームにグローバルとして宣言し、次のような Window_Loaded イベント ハンドラー内でそれらを割り当てます。

    private AdventureWorksProductsEditor.AdventureWorksLTDataSet AdventureWorksLTDataSet;
    private AdventureWorksProductsEditor.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter adventureWorksLTDataSetProductTableAdapter;
    private System.Windows.Data.CollectionViewSource productViewSource;
    
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        AdventureWorksLTDataSet = ((AdventureWorksProductsEditor.AdventureWorksLTDataSet)(this.FindResource("adventureWorksLTDataSet")));
        // Load data into the table Product. You can modify this code as needed.
        adventureWorksLTDataSetProductTableAdapter = new AdventureWorksProductsEditor.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter();
        adventureWorksLTDataSetProductTableAdapter.Fill(AdventureWorksLTDataSet.Product);
        productViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("productViewSource")));
        productViewSource.View.MoveCurrentToFirst();
    }
    
  3. backButton_Click イベント ハンドラーに次のコードを追加します。

    if (productViewSource.View.CurrentPosition > 0)
    {
        productViewSource.View.MoveCurrentToPrevious();
    }
    
  4. デザイナーに戻り、[ > ] ボタンをダブルクリックします。

  5. nextButton_Click イベント ハンドラーに次のコードを追加します。

    if (productViewSource.View.CurrentPosition < ((CollectionView)productViewSource.View).Count - 1)
    {
        productViewSource.View.MoveCurrentToNext();
    }
    

製品レコードへの変更を保存する

[変更の保存] ボタンを使用して、ユーザーが製品レコードに 変更を保存 できるようにするコードを追加します。

  1. デザイナーで、[ 変更の保存] ボタンをダブルクリックします。

    Visual Studio でコードビハインドファイルを開き、saveButton_Click イベントのために新しい Click イベントハンドラを作成します。

  2. saveButton_Click イベント ハンドラーに次のコードを追加します。

    adventureWorksLTDataSetProductTableAdapter.Update(AdventureWorksLTDataSet.Product);
    

    この例では、TableAdapterSave メソッドを使用して変更を保存します。 変更されるデータ テーブルは 1 つだけであるため、このチュートリアルではこれが適切です。 複数のデータ テーブルに対する変更を保存する必要がある場合は、Visual Studio によってデータセットで生成されるTableAdapterManagerUpdateAllメソッドを使用することもできます。 詳細については、「 TableAdapters」を参照してください。

アプリケーションをテストする

アプリケーションをビルドして実行します。 製品レコードを表示および更新できることを確認します。

  1. F5キーを押します。

    アプリケーションがビルドされて実行されます。 次の点を確認します。

    • テキスト ボックスには、写真を含む最初の製品レコードのデータが表示されます。 この製品は、製品 ID 713、名前が Long-Sleeve ロゴ ジャージー、S です。

    • >または<ボタンをクリックすると、他の製品レコード間を移動できます。

  2. いずれかの製品レコードで、[ サイズ ] の値を変更し、[変更の 保存] を選択します。

  3. アプリケーションを閉じ、Visual Studio で F5 キーを押してアプリケーションを再起動します。

  4. 変更した製品レコードに移動し、変更が保持されていることを確認します。

  5. アプリケーションを閉じます。

次のステップ

このチュートリアルを完了すると、次の関連タスクを試すことができます。