2013-06-30 4 views
0

Добраться отсюда для некоторой помощи здесь, так как это меня озадачило. Короче говоря, у меня динамическая таблица, построенная из функций, отображаемая в Placeholder внутри FormView.Динамически сгенерированный контент в PlaceHolder внутри FormView?

У меня есть кнопка «Сохранить» внутри EditItemTemplate FormView, CommandName = «Сохранить». У меня есть случай выбора (с использованием VB здесь) и (почти) все работает как ожидалось.

Однако, когда я вытаскиваю свой PlaceHolder в Code Behind, я не показываю никаких элементов управления в PlaceHolder.

Вот краткое изложение:

FormView ItemTemplate имеет View_PlaceHolder, который показывает данные из динамически сгенерированной таблицы правильно. FormView EditItemTemplate имеет Edit_PlaceHolder, который загружает одни и те же данные из динамически сгенерированной таблицы в TextBox (работает отлично, те же данные показаны как и ожидалось)

Когда я нажмите кнопку Сохранить, мой текущий код:

Dim Edit_PlaceHolder as PlaceHolder = FormView1.FindControl("Edit_FV_PlaceHolder") 
Dim EditTable as Table = Edit_PlaceHolder.FindControl("Edit_Plan_Holder") 

Edit_PlaceHolder не имеет ничего, но имеет 0 элементов управления в Controls.Count

О, еще один бит информации - моя таблица построена и добавлена ​​в PlaceHolder в событии FormView.DataBound.

Что я делаю неправильно?

+0

Какие события вы используете, можете ли вы показать код? – OneFineDay

+0

Использование FormView.DataBound для определения CurrentMode. Если CurrentMode = ReadOnly, тогда отобразите View Table. Если CurrentMode = Edit, выберите «Редактировать таблицу». Я добавляю свои элементы управления в событие PlaceHolder в FormView.DataBound. – John

ответ

0

Вы должны повторно заполнить и добавить динамически добавленную таблицу на PostBacks тоже, а не только на начальную загрузку. Ответьте на этот вопрос question для более подробной информации.

+0

В какой момент жизненного цикла я могу это сделать? Page_Load? Page_Init? – John

+0

Я всегда мог вытащить его в Page_Load, но многое из того, что я читаю, делает это в Init. Большой ключ состоит в том, чтобы сохранить эту часть нагрузки вне блока If Not Page.IsPostback. – N0Alias

+0

Ну, это странно. Попробуйте это сейчас. Когда я нажимаю «Редактировать» и устанавливаю FormView в CodeBehind в «Редактировать», я показываю запись № 1 просто отлично, но элемент управления записями по-прежнему является View Placeholder. Если я нажму на запись 2, в элементах управления появится Edit Placeholder. Это почти так, как будто я вижу этот цикл: 1) Начальная загрузка страницы - загружает данные FormView VIEW. 2) Нажмите кнопку «Редактировать», вызывает обратную передачу, Page_Load запускается снова, FormView в ЭТОЙ точке по-прежнему показывает «Просмотр», а привязка данных FormView и переход на EDIT не запускаются до тех пор, пока не завершится AFTER Page_Load. – John

0

Итак, вот что происходит:

1) Как указано NoAlias, нужно держать идентификаторами. Я использовал Page_Load, чтобы установить переменную ViewState, если я был в режиме просмотра или редактирования.

2) Я использовал отдельный метод BuildViewTable() и метод BuildEditTable() и внутри тех, которые называются моим отдельным классом, и построил таблицу.

3) Сейчас все работает :) Спасибо, NoAlias!

Смежные вопросы