вот-вот. типичнейший случай избыточного программирования

код семантически правилен.
но система делает нечто, совершенно неожиданое для человека.
и не делает того, что ожидается.
сценарий 1:
1.1. пользователь бродит по гридам.
1.2. затем открывает кнопки-меню (курсор находится на кнопках. возможно кнопках другого грида, возможно у кнопокй вообще грид не указан. возможно у "нижних" кнопок указан верхний грид - ведь мользователь может использовать настройку формы)
1.3. с точки зрения человека должно сработать сработать действие, связанное с тем местом, где стоит курсов. А ни фига. Будет сделано действие, связанное с последним запомненным датасорсом.
сценарий 2:
2.1. в форме в одном гриде поля связаны с разными датасорсами. Например, в строках заказа есть складская аналитика.
2.2. пользователь ходит по одному и тому же гриду, но получает совершенно разное поведение "хитрой кнопки" (хорошо, если программист не забыл перечислить датасорс складской аналитики в своем свитче)
сценарий 3:
2.1. прошло время после пояления "хитрой кнопки"
2.2. программист добавил во все формы новый датасорс (например, DirPartyTable)
2.3. с точки зрения пользователя структура формы не изменилась и он ожидает такого же как и раньше поведения
2.4. однако с точки зрения системы изменилось очень многое - изменился датасорс. и хорошо, если программист не забыл добавить в поведение "хитрой" кнопки обработку нового датасорса. Но ведь стопудов забудет.
2.5. в результате пользователь либо получит неработающую кнопку (скорее всего), либо работающую неожиданным для него способом.
В общем, не нужно так делать. По-моему.
Достаточно вопросов от пользователей "почему в заказах фильтрация и сортировка по складу работает так странно"