Data binding 数据绑定到特定记录
我将DataGridView绑定到此表: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的行
[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;
您的视图将保持过滤状态,以匹配您放入其中的任何数据
希望这篇文章足够清晰,让你能够了解细节。。。我今天有点糊涂 最后我不得不这样做:
谢谢你的主意。Filter的问题是它首先检索所有记录,然后再检索筛选器。所以当有很多记录的时候会有点慢,不一定。编写一种机制来检查数据表,查看它是否包含某个用户标识的任何记录,如果不包含,则运行带有WHERE子句的SQL语句,并将这些行附加到表中。然后做过滤器。这将提供一种缓存机制,并且只提取您需要的内容。