Как использовать Reflection для поиска пользовательских элементов управления на странице во вложенной главной странице - PullRequest
1 голос
/ 29 октября 2010

У меня есть страница CommonMaster , которая содержит страницу ConfigurableReportsMaster . Затем у меня есть страница AutitLog.aspx . Теперь на этой странице .aspx у меня есть несколько пользовательских элементов управления. Некоторые из этих пользовательских элементов управления наследуются от интерфейса ISQLFilter , но не от всех.

Находясь в .aspx, в событии RunReport (которое в настоящее время успешно срабатывает) я вручную вызываю метод каждого UserControl (который находится в интерфейсе ISQLFilter) с именем .GetWhereClause().

this.ucsStateFilter.GetWhereClause(ref sbWhere);
this.ucsStatusFilter.GetWhereClause(ref sbWhere);
this.ucsActivityType.GetWhereClause(ref sbWhere);
this.ucsVendorFilter.GetWhereClause(ref sbWhere);
this.ucsProducerFilter.GetWhereClause(ref sbWhere);
this.ucsNameFilter.GetWhereClause(ref sbWhere);
this.ucsPolicyFilter.GetWhereClause(ref sbWhere);
this.ucsShowAddressInfo.GetWhereClause(ref sbWhere);

Это прекрасно работает и делает точно , что мне нужно. Я хотел бы, хотя, для простоты использования, это просто вызвать один метод, скажем GetAllWhereClauses(), который будет использовать Reflection, чтобы найти все UserControls (которые наследуют интерфейс ISQLFilter.) Это звучит очень просто, и я много раз использовал отражение , Я предположил бы, что мог только что сделать:

Type t = typeof(AuditLog);
PropertyInfo[] pis = t.GetProperties();

Но пользовательских контролов там нет. Я могу посмотреть на this в окне QuickWatch и увидеть каждый из моих UserControls. Я попытался пройтись по каждому из наборов .Controls со страницы и глубже, и я могу успешно получить доступ к элементам управления, которые есть на странице CommonMaster. Но это мне здесь не поможет.

Возможно, я слишком много об этом думаю. Если это поможет, могу ли я просто получить список всех "<%@ Register ... %> предметов? Я подозреваю, что мне не хватает одного броска или чего-то еще.

Заранее спасибо, Kevin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...