Data binding 数据绑定到特定记录

Data binding 数据绑定到特定记录,data-binding,datagridview,bindingsource,Data Binding,Datagridview,Bindingsource,我将DataGridView绑定到此表: [Users] ID Name -- ---- 11 Qwe 22 Asd 网格直接绑定到类型化数据集表 我有第二张这样的桌子: [Records] ID UserID Data -- ------ ---- 67 11 .... 68 11 .... Records.UserID使用外键连接到用户 我想做的是:当用户双击user#11时,我打开一个新的网格,绑定到[Records]表,但只绑定到UserID=11的行

我将DataGridView绑定到此表:

[Users]
ID Name
-- ----
11 Qwe
22 Asd
网格直接绑定到类型化数据集表

我有第二张这样的桌子:

[Records]
ID  UserID  Data
--  ------  ----
67  11      ....
68  11      ....
Records.UserID使用外键连接到用户

我想做的是:当用户双击user#11时,我打开一个新的网格,绑定到[Records]表,但只绑定到UserID=11的行。双击、获取ID、新建网格等都可以。如果我用存储过程来做这件事,我不会有任何问题,但我希望它是绑定的,我根本不知道怎么做


您能给我一些想法吗?

如果您使用的是数据集/数据表,那么您可以这样做来过滤第二个网格中的行:

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;
您的视图将保持过滤状态,以匹配您放入其中的任何数据


希望这篇文章足够清晰,让你能够了解细节。。。我今天有点糊涂

最后我不得不这样做:

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

  • 在接受Id参数的数据集中创建自定义填充函数

  • 使用此函数填充私有类型数据集中的表

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

  • 将bindingSource绑定到此公共属性:

    this.bindingSource.DataSource=this.db.MyDataSetProperty


  • 谢谢你的主意。Filter的问题是它首先检索所有记录,然后再检索筛选器。所以当有很多记录的时候会有点慢,不一定。编写一种机制来检查数据表,查看它是否包含某个用户标识的任何记录,如果不包含,则运行带有WHERE子句的SQL语句,并将这些行附加到表中。然后做过滤器。这将提供一种缓存机制,并且只提取您需要的内容。