将主/从绑定到主/从?

串行编码器

我的问题是如何将两个主/详细信息源联系在一起。我正在使用 C# winforms 并使用 VS 2017。我的情况是我有来自 Access 数据库的 4 个表(LETTINGS、LINK_CONTRACT_LETTING、CONTRACTS、DESES),我将它们带入一个具有四个表和三个表关系的数据集。见图片。表和关系

CONTRACTS 和 DESES 表绑定到表单上的文本框,这些文本框正确地更改为下一条或上一条记录。CONTRACTS 父表的绑定源代码为:

//Contracts Binding
bsContracts = new BindingSource();
bsContracts.DataSource = dsPlanning;                    //DataSet
bsContracts.DataMember = contracts.TableName;       //DataTable

Deses子表的绑定源码为:

//Deses Binding
bsDeses = new BindingSource();              //Deses has a Details relationship to Contracts as in Master to Details. Therefore this binding is different.
bsDeses.DataSource = bsContracts;           //Master binding source bsContracts
bsDeses.DataMember = "ContToDes";       //"ContToDes" is the data relationship between the Contracts and Deses tables.

我也对 LETTINGS 表和 LINK_CONTRACT_LETTING 表主/详细信息做了同样的事情,如下所示:

//Lettings Binding
bsLettings = new BindingSource();
bsLettings.DataSource = dsPlanning;                     //DataSet
bsLettings.DataMember = lettings.TableName ;        //DataTable

//Links Binding
bsLinks = new BindingSource();
bsLinks.DataSource = bsLettings;        //Master binding source bsLettings
bsLinks.DataMember = "LetToLink";       //"ContToLink" is the data relationship between the Contracts and Link tables.

这些额外的 2 个表就像前 2 个表一样一起工作。

我不确定如何将 LINK_CONTRACT_LETTING 链接到 CONTRACTS 表,以便在选择出租时仅显示与该出租相关的合同和设计?这是可能的还是我应该做其他事情?如果我应该做其他事情,你能给我一些指导吗?

我尝试更改 bsContracts 和 bsLinks 的数据源和数据成员,但到目前为止没有任何效果。我可以将一个主控/详细信息绑定到另一个主控/详细信息吗?

谢谢您的帮助。

用户18387401

通过绑定的自动过滤仅适用于一对多关系上的从主到详细信息。当您有第三个表以多对多关系链接另外两个表时,您有两个主表和一个明细表。您不能在一端选择主记录并让它自动过滤另一端的主记录。您可以自动过滤至链接表,但您需要手动过滤其他主控。例如,您可以选择一条 Letting 记录并BindingSource自动过滤链接表。然后,您需要从中收集 IDBindingSource并使用它们来过滤BindingSourceContract 表,例如

var contIds = bsLinks.Cast<DataRowView>().Select(drv => drv.Row.Field<int>("ContId"));

bsContracts.Filter = $"ContId IN ({string.Join(", ", contIds)})";

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章