子表单数据与父表单一起导航

时间:2018-01-08 17:14:44

标签: c# sql winforms

我正在使用C#在Visual Studio 2017中开发一个项目,该项目显示并保存测试结果,尽管我创建了一个试用解决方案文件来简化表格。

我创建了一个基于服务的数据库dtbTrial并创建了以下表格: tblTestMain

CREATE TABLE [dbo].[tblTestMain]
(
    [TestNumber] NUMERIC(8) NOT NULL PRIMARY KEY, 
    [TestDate] DATE NOT NULL, 
    [AmbientTemp] INT NOT NULL, 
    [Test1] BIT NOT NULL, 
    [Test2] BIT NOT NULL, 
    [Test3] BIT NOT NULL
)

代表tblTest1(也与tblTest2tblTest3类似):

CREATE TABLE [dbo].[tblTest1]
(
    [TestNumber] NUMERIC(8) NOT NULL PRIMARY KEY, 
    [ParameterA] REAL NULL, 
    [ParameterB] REAL NULL, 
    CONSTRAINT [FK_tblTest1_tblTestMain] FOREIGN KEY ([TestNumber]) REFERENCES [tblTestMain]([TestNumber])
)

主表位于Form1,其他三个位于Form2Form3Form4。主窗体有一个TabControl,包含这三种形式和函数,如my previous question

现在,我要做的是,三个子表单或子表单中包含的数据与父表单一起导航,以便当Form1从测试号10000000导航到10000001时,其他三个表单打开时跟风。我尝试将此查询用于dtbTrialDataSet

SELECT        tblTestMain.TestNumber, tblTestMain.TestDate, tblTestMain.AmbientTemp, tblTestMain.Test1, tblTestMain.Test2, tblTestMain.Test3, tblTest1.ParameterA, tblTest1.ParameterB, tblTest2.ParameterC, tblTest2.ParameterD, 
                         tblTest3.ParameterE, tblTest3.ParameterF
FROM            tblTestMain LEFT OUTER JOIN
                         tblTest1 ON tblTestMain.TestNumber = tblTest1.TestNumber LEFT OUTER JOIN
                         tblTest2 ON tblTestMain.TestNumber = tblTest2.TestNumber LEFT OUTER JOIN
                         tblTest3 ON tblTestMain.TestNumber = tblTest3.TestNumber

并将结果数据集用于上述表格但无济于事。我错过了什么或者我该怎么做才能纠正它?

PS我还没有对主表单 做任何相关的代码,因为我不知道我需要哪些命令。

1 个答案:

答案 0 :(得分:0)

除非您明确告诉他们,否则您的子表单对主表单中发生的事情一无所知。有几种方法可以做到这一点:

  1. 您在主表单上创建一个事件(称之为DataChanged或类似的事件),每次检索数据时都会触发该事件。然后您的子表单订阅此事件并根据需要读取更新的数据。
  2. 您的子表单上有一个公共属性,用于保存加载到这些表单的数据。然后,在从main中检索数据后,在子表单上设置该数据属性。