none
同じテーブルアダプタから複数のデータセットを読み込む RRS feed

  • 質問

  • みなさん。こんにちは。いつも参考にさせてもらってます。

    同じテーブルアダプタから複数のデータセットを読み込む方法が分からず質問させて下さい。

    例えば、
    テーブルA から、データを読み込むため、データソースからテーブルAのフィールドを
    コントロールにドロップすると、最初に テーブルATableAdapter、テーブルABindingSource
    が出来ます。
    次に、テーブルABindingSourceのデータセットに影響を与えずに、別のテーブルAのデータセットを
    取得したいのですが、その様な場合、別のテーブルアダプタを作成するしか方法は無いのでしょうか?
    一つのテーブルアダプタから、互いに影響しない、複数のデータセットを作成する方法があればご教授お願いします。

    VS2010です。


    宜しくお願いします。

    2010年10月15日 12:29

回答

  • もうひとつフォームにデータセットをドロップして、下記のように2つのデータセットに対して同じデータをロードすることは可能です。

      private void Form1_Load(object sender, EventArgs e)
      {
       // TODO: このコード行はデータを 'testDbDataSet.マスタ' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
       this.マスタTableAdapter.Fill(this.testDbDataSet.マスタ);
       this.マスタTableAdapter.Fill(this.testDbDataSet1.マスタ);
    
      }

    フォーム上でデータを編集するとtestDbDataSet.マスタの方だけが変更され、testDbDataSet1.マスタの方は編集前の状態を保持しますが、このようなことをお望みですか?


    http://systemartlaboratory.com/
    • 回答としてマーク しんなべ 2010年10月20日 6:04
    2010年10月16日 12:57
  • 一つの同じテーブルを扱うのですね。少し私の勘違いがあったようです。ごめんなさい。
    さて、ご要望の件ですが、三輪の牛さんが書かれているようにして実現できると思います。テーブルアダプター、データーセット、データテーブルは3つで1セットとなるように全て型付きで生成されたクラスですので、それらのインスタンスを複数生成すれば、複数のデータセットを実現することができます。デザイナーに頼らず、コードで直接インスタンスを生成した方が場合によってはわかりやすいかもしれません。

    一方、複数カテゴリーのデータを一つのデータテーブルに読み込み、そこからDataViewをDataGridViewに表示するなどしても良いかもしれません。DataGridViewにデーターテーブルを指定した場合、暗黙的にそのDefaultViewがバインドされますが、データテーブルではなくDataViewを明示的に指定すれば、そのDataViewがバインドされます。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク しんなべ 2010年10月20日 6:04
    2010年10月19日 4:17
    モデレータ

すべての返信

  • 残念ながら不可能です。テーブルアダプターは、あるデータセット内における特定のデータテーブルを扱いやすくするために動的に作成されるクラスです。つまり、そのテーブルを扱うための専用のクラスです。
    なぜそのようなことをされたいと思われたのでしょうか? 代替案があるかもしれません。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2010年10月16日 1:30
    モデレータ
  • もうひとつフォームにデータセットをドロップして、下記のように2つのデータセットに対して同じデータをロードすることは可能です。

      private void Form1_Load(object sender, EventArgs e)
      {
       // TODO: このコード行はデータを 'testDbDataSet.マスタ' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
       this.マスタTableAdapter.Fill(this.testDbDataSet.マスタ);
       this.マスタTableAdapter.Fill(this.testDbDataSet1.マスタ);
    
      }

    フォーム上でデータを編集するとtestDbDataSet.マスタの方だけが変更され、testDbDataSet1.マスタの方は編集前の状態を保持しますが、このようなことをお望みですか?


    http://systemartlaboratory.com/
    • 回答としてマーク しんなべ 2010年10月20日 6:04
    2010年10月16日 12:57
  • なぜそのようなことをされたいと思われたのでしょうか? 代替案があるかもしれません。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    trapemiyaさん。ご返事有難うございます。

    状況としては、例えば、以下のような場合です。

    部品データを扱うテーブルには、カテゴリと、商品名等の項目があり、データベースから読みだす条件にカテゴリを指定します。

    1画面に複数カテゴリの部品データを表示する場合、同じ構造のテーブルアダプタを2つ用意しなければなりません。

    フィルターは、データ量が多く、読み出し量が少ない場合、ネットワークトラフィック、メモリの圧迫を抑えるため使用したくありません。

    その様な状況で、1つのテーブルアダプタで複数のデータセットを表示を出来ないものかと思案中です。

    何かご意見がございましたら、宜しくお願いします。

     

    三輪の牛さん。ご返事有難うございます。

    確かに、別のフォームにドロップすれば、可能ですね。参考にさせて頂きます。

     

     

     

     

    2010年10月19日 3:47
  • 一つの同じテーブルを扱うのですね。少し私の勘違いがあったようです。ごめんなさい。
    さて、ご要望の件ですが、三輪の牛さんが書かれているようにして実現できると思います。テーブルアダプター、データーセット、データテーブルは3つで1セットとなるように全て型付きで生成されたクラスですので、それらのインスタンスを複数生成すれば、複数のデータセットを実現することができます。デザイナーに頼らず、コードで直接インスタンスを生成した方が場合によってはわかりやすいかもしれません。

    一方、複数カテゴリーのデータを一つのデータテーブルに読み込み、そこからDataViewをDataGridViewに表示するなどしても良いかもしれません。DataGridViewにデーターテーブルを指定した場合、暗黙的にそのDefaultViewがバインドされますが、データテーブルではなくDataViewを明示的に指定すれば、そのDataViewがバインドされます。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク しんなべ 2010年10月20日 6:04
    2010年10月19日 4:17
    モデレータ
  • 同じフォームです。

    フォームにもうひとつデータセットをドロップすればよいです。

    TableAdapterはFillByを作って、目的のデータのみロードするように構成すればよいと思います。

     


    http://systemartlaboratory.com/
    2010年10月19日 4:38
  • 同じフォームです。

    フォームにもうひとつデータセットをドロップすればよいです。

    TableAdapterはFillByを作って、目的のデータのみロードするように構成すればよいと思います。

     


    http://systemartlaboratory.com/
    三輪の牛さん。ご返事有難うございます。

    フォームにデータセットをドロップしても、何も変わりません。
    フォーム上に1つのテーブルアダプタをドロップすると、
    XXTableAdapter、XXBindingSource
    が出来ます。
    次に、同じテーブルアダプタをドロップしても、新たな XXTableAdapter は作成されません。
    それとも、別のデータセットを作成し、そこに同じテーブルアダプタを作成し、それを
    ドロップするという事でしょうか?

    オブジェクトは、
    データセット   テーブルアダプタ、データテーブルを含む、データソースの第1階層の事
    テーブルアダプタ データセットに含まれ、デザイナで定義する。
    と考えています。

    私が、基本的な事に気がついていないか、操作方法、設定が悪い気もします。
    申し訳ありませんが、ご教授お願い出来ないでしょうか?




    trapeniyaさん。ご返事有難うございます。

    ご教授の方法も検討してみます。

    2010年10月20日 4:31
  • 三輪の牛さん。trapeniyaさん。

    データセットとは、コントロールのデータセットの事ですね。
    やはり初歩的な事に気がついていませんでした。

    ご教授有難うございました。
    2010年10月20日 6:04