This solution uses the “listener” method for checking the rows in the repeater.
When an event – say, a click – occurs on a widget in a row, and that widget handles the associated interaction for that event (in this case, OnClick), that interaction will be evaluated for every row in the repeater, one row at a time.
Similarly, if you move a widget in a repeater, that widget’s OnMove interaction will be evaluated for each row in the repeater, one row at a time, in the context of that row. “Context” meaning that, for example, the keyword “Item” will apply to the current row being evaluated, just as it would in the OnItemLoad handler, and any row widget referenced (e.g., the checkbox) will be referenced for the current row.
Here each outer checkbox marks/unmarks the row that matches its color on select/unselect, and then moves the “listener” widget in the repeater row. The listener’s OnMove interaction is then evaluated for each row. The listener’s code looks like this:
Unfortunately, this is more tedious. In the checkbox code (inside the repeater), you test what Item.color is and check or uncheck the associated checkbox outside the repeater:
OnSelected (of checkbox inside of repeater)
If [[Item.color]] is equal to "Red"
Set selected of checkbox "red" to true
Else If [[Item.color]] is equal to "Blue"
Set selected of checkbox "blue" to true
...
OnUnselected (of checkbox inside of repeater)
If [[Item.color]] is equal to "Red"
Set selected of checkbox "red" to false
Else If [[Item.color]] is equal to "Blue"
Set selected of checkbox "blue" to false
...