子窗体是插入到另一窗体中的窗体。原始窗体称为主窗体,窗体中的窗体称为子窗体。窗体/子窗体也称为阶层式窗体、主窗体/细节窗体或父窗体/子窗体。
当显示具有一对多关系的表或查询中的数据时,子窗体特别有效。例如,可以创建一个带有子窗体的主窗体,用于显示“类别”表和“产品”表中的数据。“类别”表中的数据是一对多关系中的“一”方,“产品”表中的数据是关系中的“多”方,因为每一类别都可以有多个产品。
主窗体显示关系中“一”方的数据。
子窗体显示关系中“多”方的数据。
在这类窗体中,主窗体和子窗体彼此链接,所以子窗体只显示与主窗体中当前记录相关的记录。例如,当主窗体显示“饮料”类别时,子窗体将会只显示“饮料”类别中的产品。
当创建子窗体时,可以将其设计为显示在“数据表”视图、“窗体”视图、数据透视表视图或数据透视图视图中。也可以设置子窗体的默认视图,禁用一个或多个视图。当主窗体在“窗体”视图中显示时,可以切换子窗体的视图。
当主窗体在数据透视表视图或数据透视图视图中打开时,子窗体不显示。
可以使窗体显示在看似数据表的“窗体”视图中,但由于它显示在“窗体”视图中,因此可以显示窗体页眉和页脚。
根据具有一对多关系的表来创建窗体和子窗体时,主窗体显示一对多关系中的“一”方,子窗体显示一对多关系中的“多”方。主窗体与子窗体保持同步,因此子窗体只显示与主窗体中记录相关的记录。
如果是使用向导创建子窗体,或者如果是从“数据库”窗口中将窗体、表或查询拖动到另一个窗体来创建子窗体,则在满足下列两项条件之一时,Microsoft Access 会自动使主窗体和子窗体同步:
如果将每个子窗体都放在主窗体上,则主窗体可以包含任意数量的子窗体。还可以嵌套多达七层的子窗体。也就是说,可以在主窗体内包含子窗体,而子窗体内可以再有子窗体,等等。例如,可以用一个主窗体来显示客户数据,用一个子窗体来显示订单,用另一个子窗体来显示订单的详细内容。但在数据透视表视图或数据透视图视图中窗体不显示子窗体。
当用带有子窗体的主窗体输入新记录时,在子窗体中输入数据后,Microsoft Access 会保存主窗体中的当前记录。这可以保证在“多”方表中的所有记录在“一”方表中都有相关的记录。当在子窗体中添加记录时,Microsoft Access 也会自动保存每一条记录。