Динамічне створення елементів управління

Іноді в процесі роботи над застосуванням виникає необхідність створення динамічного інтерфейсу. Це стає особливо актуальним у разі, коли інтерфейс застосування повинен мінятися залежно від дій користувача. В цьому випадку зручним інструментом реалізації динамічного інтерфейсу стає можливість динамічного створення і відображення на сторінці елементів управління. Для створення елементу управління необхідно створити об'єкт відповідного класу, привласнити його атрибутам необхідні значення і додати його до колекції елементів управління сторінки. При цьому слід пам'ятати про те, що оскільки у момент виконання програмної коди, що створює об'єкт і що додає його до колекції елементів управління, сторінка вже створена, додавання завжди відбуватиметься в кінець колекції. Це означає, що елемент додаватиметься після останнього елементу управління сторінки.

Щоб отримати більший контроль над розташуванням динамічно створюваного елементу управління, можна скористатися спеціально призначеним для цього елементом Placeholder. Даний елемент управління призначений для розміщення інших елементів усередині себе і може бути розташований в будь-якому місці сторінки. При цьому, якщо усередині Placeholder відсутній вміст, це ніяк не вплине на вміст сторінки.

При використанні динамічно створюваних елементів управління необхідно пам'ятати, що вони існують тільки до чергового зворотного відсилання. Якщо після зворотного відсилання динамічно створений елемент управління необхідно як і раніше відображати на сторінці, потрібно створювати елемент управління в обробнику події Page.Load. При створенні елементу управління в обробнику події Page.Load ASP.NET використовує будь-яку інформацію про стан вигляду після закінчення цього обробника події.

Щоб мати можливість програмної взаємодії з динамічно створеним елементом управління, останньому необхідно привласнити унікальний ідентифікатор (ID), що є аналогом ID будь-якого іншого елементу управління. Надалі цей ідентифікатор можна використовувати для того, щоб знайти даний елемент управління в колекції елементів управління сторінки за допомогою методу Page.FindControl() і використовувати його в програмному коді.

Проілюструємо все вищесказане наступним прикладом. Припустимо, необхідно в прикладі, що розглядається вище, ввести можливість введення по батькові за бажанням користувача. При цьому небажано, щоб поле для введення по батькові з'являлося на екрані, якщо користувач включить відповідний режим. Реалізувати це можна таким чином.

Розмістимо на формі елемент управління CheckBox і встановимо властивість AutoPostBack цього елементу рівним True.

Розмістимо на формі елемент управління Placeholder. В результаті цих дій сторінка в режимі дизайну виглядатиме таким чином (рис. 4.1):

Мал. 4.1. Відображення сторінки прикладу в режимі дизайну

Модифікуємо початковий код нашого застосування. У обробник події Page.Load додамо наступний код, що створює об'єкти типу Label і TextBox і що додає їх до колекції Controls елементу Placeholder:

if (CheckBox1.Checked)

{

Label lblSName = new Label();

lblSName.ID = "lbl_SName";

lblSName.Text = "По батькові";

PlaceHolder1.Controls.Add(lblSName);

TextBox tbSName = new TextBox();

tbSName.ID = "tb_SName";

PlaceHolder1.Controls.Add(tbSName);

}

Внесемо зміни в програмний код обробника події натиснення на кнопку "Відправити". Повний текст програмної коди цього обробника представлений нижчим.

string sname=string.Empty;

TextBox tbSname=(TextBox) Page.FindControl("tb_SName");

if (tbSname!=null)

{

sname = tbSname.Text;

}

lbl_Result.Text = "Здрастуйте, "+tb_FirstName.Text+"

"+sname+" "+

tb_LastName.Text+"! Ласкаво просимо в застосування ASP.NET";

lbl_Result.ForeColor = Color.Red;

З прикладу видно, що за допомогою методу Page.FindControl відбувається пошук елементу управління tb_SName. У випадку, якщо він буде знайдений на сторінці, значення властивості Text даного елементу записується в змінну sname, яка потім використовується для виведення інформації на екран.

Результат роботи програми зображений на рис. 4.2.

Мал. 4.2. Результат використання динамічно створеного елементу управління

Динамічно створені елементи управління можуть обробляти події. Для реалізації цієї можливості необхідно підключити обробник події за допомогою коди делегата в події Page.Load. Оскільки всі події елементів управління генеруються після Page.Load, підключення обробника події динамічного елементу управління за межами Page.Load приведе до того, що подія елементу управління оброблятися не буде.

Щоб підключити обробник події зміни тексту, в динамічно створеному елементі управління необхідно виконати наступні дії.

Додати процедуру обробника події:

protected void tb_SName_TextChanged(object sender, EventArgs e)

{

}

У події Page.Load прив'язати цей обробник до відповідної події елементу управління:

tbSName.TextChanged += new System.EventHandler

(this.tb_SName_TextChanged);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: