【问题标题】:Child Form Data Navigates together with Parent Form子表单数据与父表单一起导航
【发布时间】:2023-03-23 03:00:01
【问题描述】:

我正在使用 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 我还没有为主窗体编写任何相关代码,因为我不知道我需要哪些命令。

【问题讨论】:

  • 只是为了确保我理解,您检索主表单中的所有数据,然后一旦检索到您将相关数据发送到子表单? “一事无成”是什么意思?发生了什么或没有发生什么,您收到了什么错误(如果有)?
  • @squillman 当我在主表单中导航时,主表单显示下一个或上一个数据,但其他三个表单仍保留测试编号 10000000。我无法理解检索部分,但我所做的是tblTestMain 中的列显示在 Form1 中。

标签: c# sql winforms


【解决方案1】:

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

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

【讨论】:

  • 抱歉,我还是个初学者。虽然我很了解要点,但我不知道如何正确执行它。我试图做的是,当主窗体导航时,公共字符串TestData(在子窗体中)捕获testNumberTextBox 中显示的值,然后 SQL 命令在子窗体中运行查询以检查记录中是否存在子表。我的问题是如何订阅事件并调用字符串。
  • 在您的回答和this question 的帮助下,我已经成功了,非常感谢。
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
相关资源
最近更新 更多