powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / GridView смена Parent и PostBack проблема потери данных
8 сообщений из 8, страница 1 из 1
GridView смена Parent и PostBack проблема потери данных
    #37548271
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имею такую структуры в разметке

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<div style="border: solid 1px red">
    <asp:PlaceHolder ID="phTmp" runat="server"></asp:PlaceHolder>
</div>

<asp:PlaceHolder ID="phTmp1" runat="server">

<asp:Panel ID="pSelectDepartments" runat="Server" CssClass="BlueCaption" >
<asp:GridView ID="gvDepartments" runat="server"
                        AutoGenerateColumns="False" Width="480"  
                        BackColor="White" DataKeyNames ="DocID"
        CellPadding="4" ShowHeader="False">

.........

</asp:GridView>
</asp:Panel>
</asp:PlaceHolder>

В рантайме требуется панель pSelectDepartments (которая содержит Грид) перенести в PlaceHolder phTmp

Делаю так, в

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
phTmp.Controls.Add(pSelectDepartments) ' выполняется при каждой загрузке
End Sub

По нажатию кнопки заполняю Грид (вручную баинд). Грид отображается на странице, в новом месте, как и ожидается.
После нажатия другой кнопки (PostBack) Грид пустой, даже gvDepartments.Rows.Count = 0

При этом, например, если рядом с Гридом положить Label и таким же манером присваивать Lablel.Text="...." , то надпись сохраняется.

В чем проблема?

Слышал, что при Controls.Add(Control) проблем со ViewState быть не должно, даже если создавать динамические контролы не в Page.Load а в обработчиках событий. Типа потому что при Controls.Add(Control) для контрола заново запускается событие Load восстановление ViewState и т.д.

Сам сколько раз создавал динамические контролы, в том числе подгружал UserControl, никогда проблем не было (на всякий случай всегда делал это в Page.Load), правда в отличие от этого сейчас контрол не создается, а только перебрасывается в другое место страницы.

Перевел
phTmp.Controls.Add(pSelectDepartments)

в событие PageInit

содержимое грида перестало пропадать и визуально и судя по gvDepartments.Rows.Count.

Но все равно осталась проблема, теперь gvDepartments.DataKeys.Count = 0

Прочитал, что DataKeys хранится не во ViewState, а в ControlState, но что из этого следует не понятно. Тем более прочитал, что ControlState хранится в том же поле на странице, что и ViewState.

Естественно, если убрать (перемещение панели с Гридом)
phTmp.Controls.Add(pSelectDepartments)

то с Гридом все в абсолютном порядке!

Т.е. вопроса 2

1) Почему в Page.Load после phTmp.Controls.Add(pSelectDepartments) теряется содержимое Грида?
2) Почему в Page.PageInit после phTmp.Controls.Add(pSelectDepartments) теряется содержимое DataKeys у Грида?

Разбирался целые сутки, так и не понял в чем дело, в инете тоже на эту тему ничего не нашел.
...
Рейтинг: 0 / 0
GridView смена Parent и PostBack проблема потери данных
    #37548359
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я не прав, но мне кажется у вас не получится. Нужно создавать динамически GridView c теми же параметрами и пихать его в PlaceHolder
...
Рейтинг: 0 / 0
GridView смена Parent и PostBack проблема потери данных
    #37548460
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. думаете, что при создании нового GridView или загрузке его в составе UserControl и помещении на страницу, однократном заполнении его данными и пересоздании при каждой загрузке страницы таким же манером, но без перезаполнения данными.
Эти данные успешно будут сохраняться во ViewState и успешно восстанавливаться?

А при перемещении GridView на странице такое успешное функционировании наблюдаться уже не будет и это никак не обойти?
При том, что с Label тоже перемещение проходит успешно, его данные сохраняются.

Интересно, с чем это связано? И почему нигде не описано.

Кстати, провернул тоже самое с динамически заполняемым DropDownList тоже никаких проблем, перемещаю его в Page.Load (лежит на той же панели рядом с GridView), его содержимое никуда не девается.
...
Рейтинг: 0 / 0
GridView смена Parent и PostBack проблема потери данных
    #37548464
Starlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey1306Может я не прав, но мне кажется у вас не получится. Нужно создавать динамически GridView c теми же параметрами и пихать его в PlaceHolder

Можно и не динамически. Сделать такой-же GridView в phTmp и биндить один или другой. Для пользователя это будет выглядеть как-будто данные перетащили.
...
Рейтинг: 0 / 0
GridView смена Parent и PostBack проблема потери данных
    #37548528
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StarlexAndrey1306Может я не прав, но мне кажется у вас не получится. Нужно создавать динамически GridView c теми же параметрами и пихать его в PlaceHolder

Можно и не динамически. Сделать такой-же GridView в phTmp и биндить один или другой. Для пользователя это будет выглядеть как-будто данные перетащили.

Я не думаю, что какое-то такое решение подойдет в моем случае.

Идея в том, что на странице есть PopUpPanel (AJAX), с кучей антуража на ней, типа Caption, кнопок и т.д., который не хотелось бы размножать многократно.

И на этом PopUpPanel панель нужно в зависимости от необходимости отображать то или иное сложное многоконтрольное содержимое, которое в обычном состоянии Visible = false на этой же странице.

Когда я такие панели оформлял в виде UserControl, который загружал, то все получалось и с GridView тоже.

А когда стал подставлять панели на странице, то не работает, причем пока только с GridView проблема. Label, DropDownList таких проблем нет.

Причем не в PopUpPanel проблема, без нее тоже не работает - просто с перемещением GridView проблема.
...
Рейтинг: 0 / 0
GridView смена Parent и PostBack проблема потери данных
    #37548553
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да Вы правы , DropDownList при такой логике помещается в PlaceHolder с данными , и дополнительно биндить не нужно.
а GridView нет.

Может так и надо )).

вынесите за пределы isPostBack заполнение и бинд грида ) . и он всегда будет с данными.
...
Рейтинг: 0 / 0
GridView смена Parent и PostBack проблема потери данных
    #37548595
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrey1306Да Вы правы , DropDownList при такой логике помещается в PlaceHolder с данными , и дополнительно биндить не нужно.
а GridView нет.

Может так и надо )).

вынесите за пределы isPostBack заполнение и бинд грида ) . и он всегда будет с данными.

Заполнять его данными при каждой загрузке страницы? На нем еще Чекбоксы в каждой строчке, т.е. он не просто отображает данные, но еще и запрашивает данные у пользователя.
...
Рейтинг: 0 / 0
GridView смена Parent и PostBack проблема потери данных
    #37551037
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кому интересно, воспользовался своими старыми наработками с использованием UserControls - и у меня пока получается, что это единственная рабочая альтернатива.
В таком случае GridView ведет себя прилично, восстанавливает свое состояние корректно.
В этом варианте есть даже плюс - модульность, но не всегда удобно под каждый чих делать отдельные файлы с UserControl

Получается, что если GridView создается на странице новый (в рантайме или грузится в составе UserControl), то он восстанавливает свое состояние корректно на PostBack, а если присутствует в разметке и в Page.Load (или даже Page.Init) меняет свое расположение на странице посредством Controls.Add(), то на PostBack восстанавливает свое состояние не корректно. Не исключено, что это как-то связано с ControlState. Но причина такого поведения GridView непонятна.

Если кто-то сможет объяснить этот эффект и/или подскажет как его обойти, буду премного благодарен!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / GridView смена Parent и PostBack проблема потери данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]