【发布时间】:2020-04-29 13:52:36
【问题描述】:
使用 Visual Studio 2019 和 sql server 12
我在winforms中实现了主从关系。父记录显示在表单中,该父行的子记录显示在 datagridview 中。只要我查看现有记录,事情就可以正常工作。但是,当我添加新的父记录时,子 datagridview 仍然停留在查看的最后一个父(持久)记录。新记录的临时 ID 为 -1。我在数据库中使用自动生成的 id。 db 有一个外键约束。当我将明细表添加到数据集时,出现了关系,但没有出现约束。我在有和没有约束的情况下进行了测试,但行为没有变化。
我读过其他人报告说他们因为临时 ID 而无法保存详细记录。对我来说,当我添加新的子行时,它会链接到不同的父记录,而不是新的父记录。
ResearchActivity 和联系人之间存在多对多关系。涉及的三个表是 ResearchActivities、Contacts 和 ResearchActivitiesContacts。我在这里将 ResearchActivity 视为父母,将 ResearchActivityContacts 视为孩子。 分享一些代码: 关系 fkc = new global::System.Data.ForeignKeyConstraint("FK__ResearchActvityContacts__ResearchActivity", new global::System.Data.DataColumn[] { this.tableResearchActivity.ResearchActivityIDColumn}, new global::System.Data.DataColumn[] { this.tableResearchActivityContacts.ResearchActivityIDColumn}); this.tableResearchActivityContacts.Constraints.Add(fkc); fkc.AcceptRejectRule = global::System.Data.AcceptRejectRule.None; fkc.DeleteRule = global::System.Data.Rule.None; fkc.UpdateRule = global::System.Data.Rule.Cascade;
孩子的绑定源 this.researchActivityContactsBindingSource.DataMember = "FK__ResearchActvityContacts__ResearchActivity"; this.researchActivityContactsBindingSource.DataSource = this.researchActivityBindingSource;
this.researchActivityBindingNavigator.BindingSource = this.researchActivityBindingSource;
this.researchActivityContactsBindingNavigator1.BindingSource = this.researchActivityContactsBindingSource;
【问题讨论】:
-
没有任何代码,很难判断哪里出错了。
-
@user994124:你试过
dataGridViewName.Refresh();吗?? -
@D J。感谢您的建议。尝试在添加新按钮的单击事件中刷新。也许,我比我应该更快地调用刷新。您对我可以调用刷新的任何其他事件有什么建议吗?
-
@Jeroen van Langen 不确定您希望我分享代码的哪些部分
-
@user994124:你是如何实现主从关系的?使用 BindingSource 组件?你如何添加记录?手动?通过使用 bindingsource.AddNew() 方法?
标签: c# winforms datagridview