Asp.net - Как найти все gridview в моем документе - PullRequest
1 голос
/ 26 октября 2009

У меня есть 4 вида сетки в моем файле aspx. Я могу закрыть их нижний колонтитул, как показано ниже

if (admin == false){
  GridView1.ShowFooter = false;
        GridView2.ShowFooter = false;
        GridView3.ShowFooter = false;
        GridView4.ShowFooter = false; }

Но я хочу сделать это, используя «для» или «для каждого». Спасибо за вашу помощь уже сейчас.

Ответы [ 3 ]

2 голосов
/ 26 октября 2009

Что-то вроде:

void doSomething(Control c)
{
  GridView g = c as GridView;
  if (g!=null)
  {
    g.ShowFooter=false;
  }
  foreach(Control c2 in c.Controls)
  {
    doSomething(c2);
  }
}

Обратите внимание, что я не скомпилировал выше. Идея состоит в том, что вы просматриваете все элементы управления в определенном контейнере (ваша страница должна работать хорошо), находите GridView, делаете что-то с gridview (например, установите для Showfooter значение false), а затем проходите через массив Controls этого элемента.

Примечание: кто-то указал, что не понимает значения

GridView g = c as GridView;

В отличие от обычного типа

GridView g = (GridView)c;

ключевое слово "as" вернет ноль, если приведение неверно - т. Е. Элемент управления не является GridView.

Edit: Еще один (очень читаемый) способ проверки типа:

if (c is GridView) g = c as GridView;
0 голосов
/ 26 октября 2009

Ваша страница имеет коллекцию элементов управления, которая содержит все элементы управления верхнего уровня на вашей странице. Под ними каждый элемент управления также имеет коллекцию Controls, поэтому очень наивная реализация может выглядеть так:

private void FindGridView()
{
  foreach (Control ctrl in Page.Controls)
  {
    GridView gv = ctrl as GridView;
    if (gv == null)
    {
      ParseCollection(ctrl);
    }
    else
    {
      gv.ShowFooter = false;
    }
  }
}

private void ParseCollection(Control parentCtrl)
{
  if (gv.Controls == null || gv.Controls.Count == 0)
    return;
  foreach (Control ctrl in parentCtrl.Controls)
  {
    GridView gv = ctrl as GridView;
    if (gv == null)
    {
      ParseCollection(ctrl);
    }
    else
    {
      gv.ShowFooter = false;
    }
  }
}
0 голосов
/ 26 октября 2009

Объедините этот код с подходом ztech

if (g.GetType() == typeOf(GridView))
{
    (GridView)c.ShowFooter = false;
}

Этот подход должен быть немного менее трудоемким, поскольку он не будет пытаться привести все элементы управления на странице, только те, чей тип - GridView.

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