0

このテーブルにバインドされた DataGridView があります。

[Users]
ID Name
-- ----
11 Qwe
22 Asd

グリッドは、型指定されたデータセット テーブルに直接バインドされています。

次のような 2 番目のテーブルがあります。

[Records]
ID  UserID  Data
--  ------  ----
67  11      ....
68  11      ....

Records.UserID は、外部キーを使用して Users に接続されます。

私がやりたいことは: ユーザーがユーザー #11 をダブルクリックすると、[Records] テーブルにバインドされた新しいグリッドが開きますが、UserID = 11 の行にのみバインドされます。ダブルクリック、ID の取得、新しいグリッドなどは OK です。sprocs に接続してこれを行っていれば問題はありませんでしたが、バインドしたいのですが、これを行う方法がわかりません。

アイデアを教えてください。

4

2 に答える 2

1

DataSets/DataTables を使用している場合は、次のようにして、2 番目のグリッドの行をフィルター処理できます。

string filter = String.Format("UserID = {0}", selectedUserId);
grdRecords.DataSource = ds.Tables["Records"].Select(filter);

返された配列のレコードを編集できると思いますが、このコレクションに新しいアイテムを追加/削除することはできません。それらを通常のテーブルに追加してから、グリッドを再フィルタリングする必要があります。

もちろん、これを行う方法は他にもあります。DataView クラスのインスタンスなど、IBindingListView から派生したオブジェクトを使用している場合は、Filter プロパティにアクセスできる必要があります。次に、これを行うことができます:

string filter = String.Format("UserID = {0}", selectedUserId);
DataView myView;
grdRecords.DataSource = myView;
myView.Filter = filter;

また、ビューは、配置したデータに一致するようにフィルター処理されたままになります。

願わくば、この投稿があなたが詳細を理解するのに十分なほど明確であることを願っています... 今日は少し気が散っています。:)

于 2009-01-19T22:01:19.920 に答える
0

結局、私はこれをしなければなりませんでした:

  1. typedDataset を返すパブリック プロパティ (MyDataSetProperty) を持つ DB クラスを作成します。

  2. Id パラメータを受け入れるカスタム Fill 関数を DataSet に作成します。

  3. この関数を使用して、プライベート typedDataset のテーブルを埋めます

    this.myTableAdapter.FillCustom(this.myTypedDataset.MyTable, this.Id);

  4. bindingSource をこのパブリック プロパティにバインドします。

    this.bindingSource.DataSource = this.db.MyDataSetProperty;

于 2009-02-05T12:34:18.823 に答える