0

master-child数百万のレコードを持つリレーションを持つ 2 つのテーブルがあります。Visual Studio によって生成された型指定されたデータセットを使用しています。テーブルが非常に大きく、仮想モードを実装したくないため、マスター テーブルを で変更してSELECT TOP X、表示される行数を制限し、内部基準でソートしました。ここで、子テーブルの問題は、アプリケーションの起動時にまだ 100 万行になることです。

生成されたものを引き続き使用し、子がすべてのデータをロードしないようDataSetに制限する解決策は何ですか? DataGridView私の頭に浮かぶ最初の解決策はSqlDataAdapter、マスターで変更された行選択のイベントで、子行のデータ入力を手動で実装することDataGridViewです。それはオンデマンドでのみロードされるようです。

4

1 に答える 1

0

これまでに応答がなかったため、これが私が見つけた最も迅速な解決策です。

  1. 現在の型指定されたデータセットとテーブル アダプターを追加したままにする
  2. データセット デザイナーを使用して、子 tableAdapter に FillBY メソッドを追加します。例はこちら
  3. Form_Load イベントから、すべてのデータベース結果を取得していた子 tableAdapter Fill() メソッドへの呼び出しを削除します
  4. マスター テーブルの生成された bindingSource のCurrentChangedイベントのハンドラーを作成し、それをフォーム Load イベントに追加します。次のようになります。

    this.myMasterTableBindingSource.CurrentChanged += 新しい EventHandler(myMasterTableBindingSource_CurrentChanged);

  5. マスター テーブルで選択した項目に基づいて、子 dataGridView に情報を入力します。

        void myMasterTableBindingSource_CurrentChanged(object sender, EventArgs e)
    {
    
            DataRowView selectedRow = myMasterTableBindingSource.Current as DataRowView;
            if (selectedRow != null && !selectedRow.IsNew)
            { 
                this.myChildTableTableAdapter.FillByUser(this.myDataSet.MyChildTable, (int)selectedRow["UserID"]);
            }
    
    }
    
于 2013-01-31T10:03:06.503 に答える