Я думаю, что существует проблема разделения пользовательского интерфейса / данных / кода.
Я думаю, что вам нужно написать оболочку для вашего источника данных, чтобы все данные были доступны для него, прежде чем он будет привязан. Это избавит вас от необходимости искать вложенные элементы управления и так далее ...
=============================================== ============
Вы никогда не хотите передавать управление любому другому объекту. Причина в том, что если вам нужно изменить пользовательский интерфейс приложения, вам придется перестраивать все, что имеет отношение к этому элементу пользовательского интерфейса.
Вот более простой подход для отображения этих данных:
Источник данных (таблица) -> ORM / Пользовательский объект данных или коллекция-> Экземпляр объекта / коллекции на странице-> Пользовательский интерфейс.
Ваш пользовательский интерфейс в идеале должен привязываться к тому экземпляру объекта, который гипотетически будет сохранен (и обернут в публичное или защищенное свойство) в любой из объектов состояния, предоставленных asp.net на странице (Session / AppState / ViewState).
Обновления в пользовательском интерфейсе могут распространяться через транзакцию (с использованием System.Transaction.TransactionScope) к объекту, хранящемуся в состоянии, а также к источнику данных, что будет гарантировать, что ваш источник данных совпадает с вашими отключенными данными, при обеспечении постепенного ухудшения в случае отказа.
При доступе к экземпляру объекта / коллекции из ваших исполняемых / других страниц общедоступное свойство или переменная облегчит эту задачу.
Эта концепция устраняет необходимость проходить контроль. Вы только передаете объекты данных назад и вперед между объектами / элементами пользовательского интерфейса, которые их используют или выполняют действия от их имени.
Обновления, которые происходят внутри двух или более компонентов времени выполнения, могут быть объявлены другим с помощью шаблона Observer или простых делегатов ...