В одном из ваших комментариев вы утверждаете, что GridView
отсутствует на главной странице, поэтому можно ли предположить, что оно находится на странице, которая использует главную страницу?И поэтому он должен быть в ContentPlaceholder
элементе управления?
Ключевой вопрос заключается в том, что FindControl
метод ищет только прямых потомков (выделение добавлено):
Этот метод найдет элемент управления, только если элемент управления непосредственно содержится в указанном контейнере;то есть метод не выполняет поиск во всей иерархии элементов управления внутри элементов управления .
Так что вам необходимо:
- Поиск элемента управленияв пределах правильного
ContentPlaceholder
элемента управления, а не из Page
. - Регулярно проходите через каждый из элементов управления в
Page.Controls
, пока не найдете нужный элемент управления.
Пример 2:
private Control FindControlRecursive(Control rootControl, string controlID)
{
if (rootControl.ID == controlID) return rootControl;
foreach (Control controlToSearch in rootControl.Controls)
{
Control controlToReturn =
FindControlRecursive(controlToSearch, controlID);
if (controlToReturn != null) return controlToReturn;
}
return null;
}
Как только вы получите свой контроль, вы должны разыграть его, используя as
, а затем проверить на ноль на случай, если это не совсем то, что вы ожидали:
var gridView = FindControlRecursively(Page, "GridView1") as GridView
if (null != gridView) {
// Do Stuff
}