This looks great!
If your interested in optimizing it for speed, the best way to do this is to avoid updating the dataset values, which is a pretty slow operation. Instead, you can mark/unmark rows, and change your filters so that they filter on whether or not a row is marked. This is barely different from what you are doing now, but the speed improvement is great.
There is one gotcha to this approach: when you mark a row, the repeater does not redraw itself and the filters don’t run, so you have to force the repeater to redraw itself after you’ve marked rows. One way to do this is to use the command Set items per page to Unlimited on the repeater. Your items per page is already unlimited, but the repeaters will redraw anyway when it gets this command. It’s kind of a hack, but it works.
I updated your file to use this method if you are interested. Other changes:
For the select-all-items checkbox, I use the OnClick handler (of a hotspot covering the checkbox) to first toggle the checkbox and then (still in OnClick) update the repeaters based on whether the checkbox is checked or not. This is better than using OnSelected/OnUnselected of the checkbox to update the repeaters, as those events will also fire when you select/unselect the checkbox elsewhere (e.g., when you check it to indicate that all list items are selected). You only want it to update the repeaters if the user clicks on it.
I moved the logic for selecting/deselecting this select-all checkbox into OnItemLoad of the list repeater. Updating the selected-tags count is in the same place.
Here’s the updated file. You should notice a speed impovement: estelkhait_TagsInSelectBox_ed3.rp (82.9 KB)