Добавить массив элементов управления на страницу aspx - PullRequest
4 голосов
/ 13 октября 2011

Я пытаюсь добавить массив элементов управления на страницу aspx (код C # позади).Это аналогичные элементы управления (критерии поиска для отдельных полей, но они будут иметь одинаковые значения).Значения выпадающего элемента управления в настоящее время устанавливаются в методе Page_Load, например:

protected void Page_Load(object sender, EventArgs e) {
  ListItem[] items = new ListItem[3];
  //these values are actually set by a database query
  items[0] = new ListItem('Apple', 'Apple');
  items[1] = new ListItem('Orange', 'Orange');
  items[2] = new ListItem('Banana', 'Banana');

  FruitDropDown.Items.AddRange(items);
  FruitDropDown.DataBind();
}

, затем на странице у меня появляется следующий элемент управления:

<asp:DropDownList ID="FruitDropDown" runat="server"/>

. Это работает нормально и заполняет элемент, но теперь я хочу создать массив этих выпадающих списков - их будет 20, поэтому я не хочу создавать его 20 раз в методе Page_Load.Должен ли я добавить выпадающий список в список, а затем сделать что-то вроде:

<asp:DropDownList ID="FruitDropDown[0]" runat="server"/>
<asp:DropDownList ID="FruitDropDown[1]" runat="server"/>

Как бы я пометил их на странице и затем смог бы получить доступ к этим значениям в контроллере?Могу ли я сделать что-то вроде этого, если я уже добавил эти именованные элементы управления на страницу aspx?

protected void Page_Load(object sender, EventArgs e) {
  ListItem[] items = new ListItem[3];
  //these values are actually set by a database query
  items[0] = new ListItem('Apple', 'Apple');
  items[1] = new ListItem('Orange', 'Orange');
  items[2] = new ListItem('Banana', 'Banana');

  for (int x = 0; x < 20; x++) {
    FruitDropDown[x].Items.AddRange(items);
    FruitDropDown[x].DataBind();
}

Требуется ли также копирование и вставка элементов управления на странице aspx 20 раз?Что если он расширится до 100?Могу ли я добавить их в цикле на странице aspx?

Ответы [ 5 ]

4 голосов
/ 13 октября 2011

Control.FindControl - это то, что вы ищете.Вы можете использовать его в любом элементе управления (например, самой странице), чтобы найти элементы управления через их NamingContainer .Поместите их, например, в Panel и используйте FindControl.

for (int x = 0; x < 20; x++) {
    DropDownList ddlFruit = (DropDownList)FruitPanel.FindControl("FruitDropDown" + x);
    ddlFruit.Items.AddRange(items[x]);    
}

Вы также можете создавать их динамически:

for (int x = 0; x < 20; x++) {
   DropDownList ddlFruit = new DropDownList();
   ddlFruit.ID = "FruitDropDown" + x
   ddlFruit.Items.AddRange(items[x]);  
   FruitPanel.Controls.Add(ddlFruit); 
}

Вы должны воссоздавать динамически созданные элементы управления на каждой обратной передаче не позднееPage_Load с тем же идентификатором, что и раньше, для обеспечения правильной загрузки ViewState и запуска событий.

3 голосов
/ 13 октября 2011

Вы можете дать им действительные идентификаторы и поместить их все в массив самостоятельно:

<asp:DropDownList ID="FruitDropDown0" runat="server"/>
<asp:DropDownList ID="FruitDropDown1" runat="server"/>

protected void Page_Load(object sender, EventArgs e) {
   ListItem[] items = new ListItem[3];
   ...

   DropDownList[] lists = new DropDownList[] { FruitDropDown0
                                              ,FruitDropDown1
                                              ,...};

   foreach(DropDownList list in lists) {
      list.Items.AddRange(items);
      list.DataBind();
   }
}
1 голос
/ 13 октября 2011

По вашему вопросу похоже, что вы пытаетесь динамически отображать элементы управления на экране.

Вот хорошая статья об этом.

0 голосов
/ 13 октября 2011

Как @Mark Cidade говорит, что ваш лучший подход будет создать элементы управления в коде позади.В конце концов, это просто классы.

Самый простой подход - поместить элемент управления, такой как элемент placeHolder, в разметку, а затем создать цикл раскрывающихся списков в цикле, присваивая каждому уникальный идентификатор, например@Mark Cidade говорит.

Оттуда нужно добавить их в качестве дочерних элементов управления в placeHolder или, если вы хотите, чтобы они были прямо на странице, вы можете добавить их в коллекцию элементов управления страницей.

0 голосов
/ 13 октября 2011

Вы должны изучить динамически создаваемые элементы управления.

http://support.microsoft.com/kb/317794

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