DataBind到特定记录

时间:2009-01-19 21:46:28

标签: data-binding datagridview bindingsource

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

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

Grid is direclty绑定到类型化数据集表。

我有第二张这样的表:

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

Records.UserID连接到具有外键的用户。

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

你能给我任何想法吗?

2 个答案:

答案 0 :(得分:1)

如果您使用的是DataSet / 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;

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

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

答案 1 :(得分:0)

最后我不得不这样做:

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

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

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

    中的表

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

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

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