Как получить информацию из динамически создаваемой TableRow C # / Asp.Net? - PullRequest
1 голос
/ 11 января 2012

Хорошо, поэтому в проекте, над которым я работаю, я делаю жестко запрограммированную панель asp: на странице и затем заполняю ее:

  1. Раскрывающийся список
  2. Asp: Table, с asp: TableHeaderRow
  3. Кнопки добавления и отмены

Когда событие selectedIndexChanged происходит с DropDownList, таблица создается, затем заполняется примерно шестью табличными ячейками, которые затем помещают в них текстовые поля asp: Textboxes.

В конечном итоге все они добавляются в таблицу, которая затем добавляется в коллекцию таблицы.

Это все работает просто отлично, но когда я иду, чтобы добавить информацию из этих динамически созданных TableRows с циклом foreach, они не там, где их можно найти, но есть TableHeaderRow.

Кроме того, когда я нажимаю кнопку «Добавить» и пропускаю процесс, я не получаю нулевых исключений, и после него остается только заголовок, все мои строки исчезают.

В любом случае я чувствую, что мне просто не хватает чего-то действительно глупого. Я просмотрел множество форумов, постов, MSDN и так и не нашел ответа на свою проблему. Любая помощь будет принята с благодарностью!

1 Ответ

2 голосов
/ 11 января 2012

Вам необходимо добавить свои динамические строки в таблицу в Page_Init, а не Page_Load.Если вы создаете его в Page_Load, ваши новые строки не будут добавлены в ViewState, и вы увидите эту проблему.

К сожалению, вы добавляете их в ответ на событие на стороне сервера, которое может оказаться сложным.Вам все еще нужно добавить строки в Page_Init, но когда страница возвращается назад, а вы в Page_Init, событие selectedIndexChanged еще не сработало.Это слишком рано в жизненном цикле страницы.

Если вы хотите узнать, сработал ли он по Page_Init, я нашел единственный способ - изучить коллекцию Request.Form("__EVENTTARGET") в этой точке.Он содержит идентификатор элемента управления, который вызвал обратную передачу - в вашем случае это будет раскрывающийся список.Элемент управления, который вызвал событие, будет присутствовать, но будет определен идентификатор, т. Е. Не MyControID, а ctl_MasterPageContentHolderID_NamingContainer1_MyControlID` или тому подобное - так что вам придется учитывать его при поиске.Как только вы определили, что это событие сработало, вы можете добавить строки.Как только они будут добавлены туда, они не исчезнут.

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

...