У меня есть страница 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