GridView PreRender не запускается после RowDeleted - PullRequest
2 голосов
/ 21 декабря 2010

При удалении строки GridView в пользовательском интерфейсе (через LinkButton, CommandName = "Delete") представление не обновляется автоматически и продолжает отображать удаленную строку, пока я не предприму какое-либо другое действие (вручную обновите страницу, перейдите иобратно и т. д.).

В отладчике я вижу, что строка успешно удалена, и оба события RowDeleting и RowDeleted запускаются, но событие Prerid GridView не запускается впоследствии (в отличие от этого событие PreRender делает срабатывает при первой загрузке страницы, при добавлении новой строки и т. д.).

Я использовал GridViews в аналогичных конфигурациях без этой проблемы, но я не вижу очевидных различий.Кажется, что процесс прерывается до события PreRender, но не генерируется никаких исключений, и выход из конца события RowDeleted в отладчике возвращает меня к пользовательскому интерфейсу, как будто процесс завершается нормально.

Любые идеи, где я должен искать проблемы или решения?Другие возможные относящиеся к делу детали: GridView связан с SqlDataSource;источник данных не объявляет никакой DeleteCommand;Я обрабатываю удаление, вызывая хранимую процедуру в обработчике RowCommand, после чего я перепривязываю GridView с помощью DataBind (), после чего я вижу, что Rows.Count GridView уменьшился на единицу, как я и ожидал.Все выглядит нормально через событие RowDeleted, затем ... ничего!

ОБНОВЛЕНИЕ: попытался вызвать SP для удаления в обработчике RowDeleting, а не в обработчике RowCommand ... без разницы.Строка по-прежнему удаляется, но обработка прекращается без вызова PreRender GridView, а удаленная строка остается на дисплее до тех пор, пока какое-либо дальнейшее взаимодействие с пользовательским интерфейсом не обновит представление.

UPDATE2: я даже не получаю событие PreRender страницы,который предшествует управлению событиями PreRender.Будем продолжать работать в обратном направлении, чтобы увидеть, смогу ли я найти, где что-то останавливается, поскольку выход из события RowDeleted, похоже, является концом строки ...

ОБНОВЛЕНИЕ3: Я еще немного потрудился и, хотя это усложняет мой код, я смог заставить вещи работать, объявив DeleteCommand в SqlDataSource GridView, который просто выполняет простое удаление строки (записи), а затем в обработчике RowDeleted, вызывая дополнительные вещи, которые были в моей хранимой процедуре, которыедолжно произойти вместе с первичным удалением.Хотя менее удобно иметь первичное удаление в одном месте и связанную обработку в другом, по крайней мере это работает.

Но я не знаю, что из этого следует: что для правильной жизни страницы требуется команда DeleteCommand.цикл?что не следует делать удаление в хранимой процедуре в обработчике RowCommand?что-то другое?Хотел бы я узнать, что конкретно сломалось в моей первоначальной попытке ...

Ответы [ 2 ]

0 голосов
/ 31 декабря 2010

События PreRender запускаются на постбэках на других ваших страницах? Информация о этой статье MSDN (под заголовком «События обратной и не-обратной передачи в элементах управления сервером», абзац после примечания) заставляет задуматься, если только запускаются события Init и Load для страницы и всех дочерних элементов управления.

0 голосов
/ 21 декабря 2010

просто связать сетку с свежими данными из базы данных после удаления строки.

...