0

我有一个绑定到此表的 DataGridView:

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

网格直接绑定到类型化的数据集表。

我有第二张这样的桌子:

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

Records.UserID 使用外键连接到用户。

我想要做的是:当用户双击用户 #11 时,我打开一个新网格,绑定到 [Records] 表,但只绑定到 UserID = 11 的行。双击、获取 ID、新网格等这些都可以。如果我这样做与 sprocs 连接,我不会有任何问题,但我希望它被绑定,我根本不知道如何做到这一点。

你能给我一些想法吗?

4

2 回答 2

1

如果您使用的是 DataSets/DataTables,那么您可以执行以下操作来过滤第二个网格的行:

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

我相信您可以编辑返回的数组中的记录,但您将无法向此集合添加/删除新项目。您必须将它们添加到常规表中,然后重新过滤网格。

当然,还有各种其他方法可以做到这一点。如果您使用从 IBindingListView 派生的对象,例如 DataView 类的实例,您应该有权访问 Filter 属性。然后你可以这样做:

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

您的视图将保持过滤状态,以匹配您放入其中的任何数据。

希望这篇文章足够清晰,让您能够弄清楚细节......我今天有点散漫。:)

于 2009-01-19T22:01:19.920 回答
0

最后我不得不这样做:

  1. 创建一个 DB 类,其公共属性 (MyDataSetProperty) 返回 typedDataset

  2. 在接受 Id 参数的 DataSet 中创建一个自定义 Fill 函数。

  3. 使用此函数填充私有 typedDataset 中的表

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

  4. 将 bindingSource 绑定到此公共属性:

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

于 2009-02-05T12:34:18.823 回答