我有一个绑定到此表的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有关,我不会有任何问题,但我希望它被绑定,我根本不知道如何做到这一点。
你能给我任何想法吗?
答案 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)
最后我不得不这样做:
创建一个DB类,其中包含一个返回typedDataset的公共属性(MyDataSetProperty)
在DataSet中创建一个接受Id参数的自定义Fill函数。
使用此函数填充私有typedDataset
中的表this.myTableAdapter.FillCustom(this.myTypedDataset.MyTable,this.Id);
将bindingSource绑定到此公共属性:
this.bindingSource.DataSource = this.db.MyDataSetProperty;