Работа с динамически созданнымы элементами

badfilin
Дата: 05.04.2010 01:59:37
Всем привет!

Я создаю динамически текстовое поле внутри таблицы Table1:

                // создаем новую строку
                TableRow tr = new TableRow();

                // создаем столбец
                TableCell tc2 = new TableCell();
                tc2.BorderStyle = BorderStyle.Solid;
                tc2.BorderWidth = 1;
                // создаем текстовое поле в столбце
                TextBox tb = new TextBox();
                tc2.Controls.Add(tb);
                tr.Cells.Add(tc2);

                Table1.Rows.Add(tr);

Вопрос: после, уже на странице я в это текстовое поле ввожу какую-то инфу. Как потом мне к ней получить доступ?

ЗЫ: На сколько я понял, что-то типа Table1.Controls[0]...., а вот что да как не понимаю.
ЗЫ2: Лучше показать каким нить примерчиком, но можно и ссылкой.

Заранее благодарен.
n_string
Дата: 05.04.2010 03:02:49
TextBox tb = new TextBox();
tb.ID = "txbMyValue";
tc2.Controls.Add(tb);
//----------------------
string myValue = txbMyValue.Text
Яростный Меч
Дата: 05.04.2010 09:29:14
n_string
string myValue = txbMyValue.Text
txbMyValue нет в классе страницы (мы же добавили при выполнении)

Можно
string myValue = Request["txbMyValue"];
n_string
Дата: 05.04.2010 09:53:22
Справедливо.
Или так:
string myValue = (Page.FindControl("txbMyValue") as TextBox).Text;
oleginn
Дата: 05.04.2010 11:26:41
n_string
Справедливо.
Или так:
string myValue = (Page.FindControl("txbMyValue") as TextBox).Text;

Интересно, с какой это радости Page.FindControl("txbMyValue") найдет текстбокс, которого нет на странице. Он же был добавлен в ячейку таблицы. Вообще, не совсем понятно, имелось в виду взять значение поля во время формирования таблицы или все же после постбэка?
oleginn
Дата: 05.04.2010 11:30:19
Яростный Меч
[quot n_string]
Можно 
[src c#]string myValue = Request["txbMyValue"];

А это почему должно работать? Он там генерит name типа ...ctl00$ctl00$txbMyValue. Так что его просто от туда так не выкорчевить)
n_string
Дата: 05.04.2010 11:46:00
Вот тебе и тема для размышления:)
bastad
Дата: 05.04.2010 12:13:42
Динамические контролы необходимо восстанавливать при каждом постбаке, с теми же ID, чтобы значения восстановились корректно.
Зритель с попкорном 5
Дата: 05.04.2010 12:13:51
badfilin
Всем привет!

Я создаю динамически текстовое поле внутри таблицы Table1:

                // создаем новую строку
                TableRow tr = new TableRow();

                // создаем столбец
                TableCell tc2 = new TableCell();
                tc2.BorderStyle = BorderStyle.Solid;
                tc2.BorderWidth = 1;
                // создаем текстовое поле в столбце
                TextBox tb = new TextBox();
                tc2.Controls.Add(tb);
                tr.Cells.Add(tc2);

                Table1.Rows.Add(tr);

Вопрос: после, уже на странице я в это текстовое поле ввожу какую-то инфу. Как потом мне к ней получить доступ?

ЗЫ: На сколько я понял, что-то типа Table1.Controls[0]...., а вот что да как не понимаю.
ЗЫ2: Лучше показать каким нить примерчиком, но можно и ссылкой.

Заранее благодарен.


Если Вы этот код исполняете и при постбэке, то вы всё правильно поняли и добавленый TextBox доступен так:
TextBox tb = (TextBox)Table1.Rows[0].Cells[0].Controls[0];
badfilin
Дата: 05.04.2010 12:32:46
Яростный Меч
n_string
string myValue = txbMyValue.Text
txbMyValue нет в классе страницы (мы же добавили при выполнении)

Можно
string myValue = Request["txbMyValue"];



Вот то, что "можно" работает. Другое не пробовал.

Спасибо всем!