Here are the Drupal Views BACT uses as class and camp rosters:
The Class Rosters are the most straightforward.
There's one View to list all of the upcoming class events: https://bactheatre.org/classdirectory
Then each link on that list takes you to the roster for that particular event: https://bactheatre.org/classroster/3195
On the roster, clicking the name of the Child takes you to the Participant record for the event, which displays all the custom fields. Clicking the Parent name takes you to the Contact record, which displays more detailed contact information.
The Winter Camp roster is squidgier.
The View is located here: https://www.bactheatre.org/wintercamp
It filters by Fee Level, and then Event Title.
There are two events, Winter Camp Oakland and Winter Camp Berkeley. Within each event, the price set lists the days available for purchase, including half-day options. This way you can select multiple days you'd like to attend, but only enter all of your information once.
The price options are formatted to include the Day and the Half or Full marker. For example, "Dec26 - Full" or "Jan05 - Half". That's the first filter. The second filter works on Event title, so as to differentiate between Oakland and Berkeley camps.
In theory, clicking the names should accomplish the same thing as they do on the class rosters, but there's something wrong with my PHP.