One way to accomplish this would be using a Script Trigger. Capture the unique key of the line item in the portal the user clicks. Go to Related Record and set all the other line items to "No", and the one he clicked to "Yes".
Edit: Or, you don't necessarily even have to use a Script Trigger. Just make the "Primary" field a button that runs the same script.
“Primary contact” is properly an attribute of the event, not of the contact.
Create a foreign key field in Events. Put a button into the portal row that sets the field to the contactID in the portal row, or clears it when they are identical. Use Conditional Formatting to highlight the portal row of the primary contact.
This automatically guarantuees that there can only be one contact per event.