Как использовать linq для объекта, чтобы скрыть или показать какой-то элемент управления на странице asp.net - PullRequest
1 голос
/ 11 августа 2010

Я создаю функцию, чтобы скрыть все элементы управления gridview, кроме элемента управления, чье имя передается в функции.

Здесь this.Controls относится к элементам управления, присутствующим на странице (При ошибке компиляции генерируется хотя).Я хочу получить все элементы управления типа GridView со свойством Name, не равным тому, которое передано в функцию.

Теперь после получения коллекции GridView.Я хочу скрыть все сетки

private void HideGridView(string gridToShow)
{
    GridView[] result = from control in this.Controls
                 where control.GetType() == typeof(GridView) && control.Name !=gridToShow
                 select control as GridView;

    foreach (var control in result)
        control.Visible = false;
}

Во время компиляции он показывает мне this.Control как недействительный, потому что это не коллекция.

How can I achieve this on a web application

РЕДАКТИРОВАТЬ:

private void HideGridView(string gridToShow)
{
    (from control in this.Controls.OfType<GridView>
     where control.Name !=gridToShow
     select control).ToList().ForEach(gv=>gv.Visible=false);
}

Вот код, который я написал, показывает ошибку: GridView - это тип, но используется как переменная (ошибка времени компиляции).И в where недопустимый термин выражения, где '

Ответы [ 2 ]

3 голосов
/ 11 августа 2010

Где существует этот метод?Это на вашей странице или в отдельной библиотеке.Если он является членом вашего класса, производного от страницы, он будет работать нормально.Если вы поместите его в отдельную библиотеку, вам нужно будет передать страницу:

private void HideGridView(Page page, string gridToShow) 
{ 
    (from control in page.Controls.OfType<GridView>()
     where control.Name !=gridToShow 
      select control).ToList().ForEach(gv=>gv.Visible = false);
 }

И она будет называться

  HideGridView(this, "VisibleGrid");

. Вы также можете сделать это расширением.метод:

static class MyExtensions
{
  public static void HideGridView(this Page page, string gridToShow) 
  { 
       /// same as above.
  }
}

, тогда вы можете назвать его так:

  HideGridView("VisibleGrid");
2 голосов
/ 11 августа 2010

Вот, пожалуйста:

this.Controls.OfType<GridView>().Where(c => c.ID != gridToShow)
    .ToList().ForEach(gv => gv.Visible = false);

А в качестве метода расширения:

public static void ShowGridView(this Page page, string gridToShow)
{
    page.Controls.OfType<GridView>().Where(c => c.ID != gridToShow)
        .ToList().ForEach(gv => gv.Visible = false);
}

, что позволит вам назвать это так в вашей Page_Load:

this.Page.ShowGridView("showThisGridView");
...