События страницы, такие как Init
и Load
, всегда будут запускаться перед обработчиком событий, вызвавшим обратную передачу. Это основа жизненного цикла Page (Визуальное представление Питера Бромберга, см. Здесь ). У большинства разработчиков, плохо знакомых с ASP.NET, есть серьезные проблемы с пониманием и соответствующей обработкой этого «затруднения».
Идеальный способ сделать это:
а. Ваш Page_Init
должен вызвать процедуру (назовем ее BindData()
для иллюстрации), которая обрабатывает создание таблицы на основе данных базы данных. Этот метод будет похож на метод привязки, который связывается с данными базы данных и отображает элементы пользовательского интерфейса на основе этой привязки. Итак, вы должны удалить код создания таблицы из метода Page_Init
и поместить его в отдельный метод, чтобы его можно было вызывать при необходимости.
Важное примечание: Этот метод BindData()
также обрабатывает присоединение обработчика событий для динамически создаваемого элемента управления ImageButton к элементу управления. Мы назовем это ImageButton_Click
. Это имеет решающее значение для управления событием для запуска при последующей обратной передаче.
б. Когда ваш метод ImageButton_Click
выполняется, он вызывает метод BindData()
для воссоздания таблицы и ее привязок, но с новыми правилами порядка сортировки.
Итак, порядок выполнения при первой загрузке:
Page_Init
BindData()
Порядок выполнения при последующих загрузках (при обратной передаче):
Page_Init
BindData()
- прикреплен обработчик событий для ImageButton.
ImageButton_Click
BindData()