Я создал настраиваемый серверный элемент управления (унаследованный от GridView).
На странице GridView привязан к DataSet, поэтому во время разработки я не знаю, какие столбцы будут присутствовать в моем GridView.
Теперь я хочу добавить текстовое поле в каждую ячейку для строки заголовка GridView, и эти текстовые поля будут управлять фильтрацией столбцов. (текстовые поля добавляются с помощью метода GridView OnRowCreated).
Пока все хорошо, появляются текстовые поля и фильтрация работает.
Проблема в том, что после каждой обратной передачи значение Text текстовых полей теряется. Судя по моим экспериментам, это похоже на то, что я добавляю текстовые поля слишком поздно в жизненном цикле страницы / элемента управления.
Как справиться с этим типом проблемы, когда мне нужно будет создавать и добавлять текстовые поля на ранних этапах жизненного цикла (например, OnInit GridView), но добавление текстовых полей зависит от информации, полученной позже в жизненном цикле?





Почему бы не сохранить значения в ViewState и не прочитать их (заполнить текстовые поля) при обратной передаче?
Вам не нужно беспокоиться о значениях текстового поля, только об их идентификаторе и о том, когда вы их создаете; Состояние управления (... хммм ... или, может быть, состояние просмотра) позаботится обо всем остальном, если вы создадите и "снабдите" страницу тем же количеством текстовых полей и их соответствующими (уникальными (!)) идентификаторами.
Вы можете сделать это как Page_Init, так и Page_Load ... Page_Init несколько рекомендуется, но это зависит от ваших потребностей.
Вот страница, которая будет полезна: http://msdn.microsoft.com/en-us/library/ms178472.aspx В нем конкретно говорится, что вам нужно использовать событие Pre_Init для создания элементов управления yout:
PreInit : Use this event for the following:
- Check the IsPostBack property to determine whether this is the first time the page is being processed.
- Create or re-create dynamic controls.
- Set a master page dynamically.
- Set the Theme property dynamically.
- Read or set profile property values.