Sounds like you need something more like a conditional value list. A search in the forum here should have some instructions on how to set that up a link to a demo. I remember downloading the demo, but not exactly which thread it was in.
You have two options to do what you want. Sticking with your current design for option 1:
Add a portal filter to your TrainingItems based portal:
$$ScheduleID = TrainingItems::ScheduleID
Where ScheduleID is a serial number field set up as the primary key for TrainingSchedule and used to link all your TrainingItems records to a specific training Schedule record.
Add a button to your TrainingSchedule portal, format all the fields as a single button or set up script triggers on these fields to run this script:
Set Variable [$$ScheduleID ; value: TrainingSchedule::ScheduleID ]
Refresh Window [flush cached join results]
You can also set up a conditional format with:
$$ScheduleID = TrainingSchedule::ScheduleID
To specify a fill color for your fields to highlight the training Schedule portal row to show which one is currently selected to show the contents of the detail portal.
Set up a list view layout listing your training schedule records with fields from the Teachers table included in header, grand summary and/or sub summary layout parts. Put a portal to the TrainingItems table in the body of the report.
I used Option 1.
Works pretty well.
Maybe not totally obvious to end users, but it works.