Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Динамическое добавление (и удаление) элементов управления

Динамическое добавление (и удаление) элементов управления

Но что делать, если нужно изменить содержимое Panel в среде выполнения? Соответствующий процесс должен показаться вам очень знакомым, если вы внимательно прочитали материал книги, посвященный работе с Windows Forms. Давайте добавим в текущую страницу кнопку (с названием btnAddWidgets), которая будет динамически добавлять в Panel пять новых типов TextBox, и еще одну кнопку, которая будет выполнять очистку Panel от всех элементов управления. Обработчики событий Click для этих кнопок приведены ниже.

protected void btnAddWidgets_Click(object sender, EventArgs e) {
 for (int i = 0; i ‹ 5; i++) {
  // Назначение имени, чтобы позже получить соответствующее
  // текстовое значение с помощью метода
  // HttpRequest.QueryString().
  TextBox t = new TextBox();
  t.ID = string.Format("newTextBox{0}", i);
  myPanel.Controls.Add(t);
  ListControlsInPanel();
 }
}
protected void btnRemovePanelItems_Click(object sender, EventArgs e) {
 myPanel.Controls.Clear();
 ListControlsInPanel();
}

Обратите внимание на то, что каждому TextBox назначается уникальное значение ID (newTextBox1, newTextBox2 и т.д.), чтобы можно было программными средствами получить содержащийся в этих элементах текст, используя коллекцию HttpRequest.Form (как будет показано чуть позже).

Чтобы получить значения этих динамически генерируемых типов TextBox, добавьте в пользовательский интерфейс еще один тип Button и тип Label. В пределах обработчика события Click для Button реализуйте цикл по всем элементам, содержащимся в рамках типа HttpRequest.NameValueCollection (доступного с помощью HttpRequest.Form), добавляя полученную текстовую информацию к локальному типу System.String. По завершении обработки коллекции назначьте эту строку свойству Text нового элемента Label с именем lblTextBoxText.

protected void btnGetTextBoxValues_Click(object sender, System.EventArgs e) {
 string textBoxValues = "";
 for(int i = 0; i ‹ Request.Form.Count; i++) {
  textBoxValues += string.Format("‹li›{0}‹/li›‹br›", Request.Form[i]);
 }
 lblTextBoxText.Text = textBoxValues;
}

Запустив приложение, вы сможете увидеть как содержимое текстовых блоков, так и довольно длинные ("нечитаемые") строки. Такие строки отражают визуальное состояние элементов на странице и будут рассматриваться позже, в следующей главе. Также вы заметите, что после обработки запроса новые текстовые окна исчезают. Причина опять кроется в природе HTTP – этот протокол не обеспечивает сохранения состояния. Чтобы динамически созданные типы TextBox сохранялись после вторичных запросов, вы должны сохранить состояния этих объектов, используя соответствующие приемы программирования ASP.NET (эти вопросы также рассматриваются в следующей главе).

Исходный код. Файлы примера DynamicCtrls размещены в подкаталоге, соответствующем главе 23.

Оглавление книги


Генерация: 1.516. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз