Конфликт настраиваемого серверного элемента управления ASP.NET (GridView), привязка данных и жизненный цикл элемента управления - PullRequest
1 голос
/ 26 ноября 2008

Я создал пользовательский серверный элемент управления (унаследованный от GridView).

На странице GridView привязан к DataSet, так что я не знаю во время разработки, какие столбцы будут присутствовать в моем GridView.

Теперь я хочу добавить текстовое поле в каждую ячейку для строки заголовка GridView, и эти текстовые поля будут управлять фильтрацией столбцов. (текстовые поля добавляются с помощью метода GridView OnRowCreated).

Пока все хорошо, появляются текстовые поля, и фильтрация работает.

Проблема в том, что после каждой обратной передачи текстовое значение текстовых полей теряется. Судя по моим экспериментам, это происходит потому, что я слишком поздно добавляю текстовые поля в жизненный цикл Page / Control.

Как можно решить проблему такого типа, когда мне нужно было бы создавать и добавлять текстовые поля в начале жизненного цикла (например, OnInit в GridView), но добавление текстовых полей зависит от информации, полученной позже в жизненном цикле

Ответы [ 3 ]

1 голос
/ 26 ноября 2008

Почему бы не сохранить значения в ViewState и прочитать их обратно (заполнить текстовые поля) при обратной передаче?

0 голосов
/ 19 февраля 2009

Есть страница, которая будет полезна: http://msdn.microsoft.com/en-us/library/ms178472.aspx В частности, говорится, что вам нужно использовать событие Pre_Init для создания элементов управления yout:

PreInit : используйте это событие для следующее:

  • Проверьте свойство IsPostBack, чтобы определить, является ли это первым время обработки страницы.
  • Создание или повторное создание динамических элементов управления .
  • Установить главную страницу динамически.
  • Установить свойство Theme динамически.
  • Чтение или установка значений свойств профиля.
0 голосов
/ 26 ноября 2008

Вам не нужно беспокоиться о значениях текстового поля, только об их идентификаторе и при их создании; Управляющее состояние (... хммм ... или, возможно, состояние представления) позаботится об остальном, пока вы создаете и «снабжаете» страницу тем же количеством текстовых полей и их соответствующими (уникальными (!)) идентификаторами.

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

...