Событие Gridview RowUpdating не запускается - PullRequest
3 голосов
/ 09 июня 2009

У меня есть Gridview с AutoGenerateColumns="False".
Я использую TemplateField для отображения моих кнопок «Изменить», «Обновить» и «Отмена» в первом столбце GridView в соответствующих полях ItemTemplate и EditItemTemplate.

В ItemTemplate у меня есть ImageButtong с CommandName «Редактировать». Это работает, как и ожидалось, и я могу поставить точку останова в обработчике событий RowCommand, чтобы увидеть имя команды «Событие». После нажатия кнопки обратной передачи этот ряд переводится в режим редактирования. Все текстовые поля отображаются так, как они предназначены.

В этот момент времени вышеупомянутый EditItemTemplate отображается с двумя кнопками ImageButtons внутри. Один имеет CommandName = "Update", а другой - «Отмена».

Моя проблема заключается в том, что щелчок по кнопке «Обновление ImageButton» отправляет сообщения обратно, но ни события RowCommand, ни RowUpdating не запускаются.

Я установил необходимые атрибуты в теге GridView. (Обратите внимание, что в виде сетки EnableViewState="False" - если я установлю значение True, я получу стандарт

«Не удалось загрузить viewstate. Дерево управления ...» и т. Д. Ошибка)

Одна странная вещь, которая, как я заметил, заставляет меня думать, что это проблема ViewState, заключается в том, что если я изменю CommandName кнопки «Обновить» на «Редактировать», то событие обратной передачи захватывается в событии RowCommand ...

Любые предложения приветствуются. Спасибо.

Ответы [ 10 ]

7 голосов
/ 18 марта 2011

Как отметили Асем и Рон, добавление атрибута CausesValidation = "false" в CommandField решило проблему. Причина была в том, что у меня были некоторые другие элементы управления проверкой на странице, и при обновлении GridView страница запускала другие элементы проверки, поэтому я думаю, что лучше установить свойство ValidationSummary.

4 голосов
/ 16 ноября 2012

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

Из прочитанных решений я искал стандартное свойство CausesValidation="false", чтобы решить эту проблему. Я не смог найти это поле, потому что похоже, что я использовал AutoGenerateEditButton="True" для добавления кнопок редактирования в сетку.

Мое РЕШЕНИЕ было следующим, и я надеюсь, что это поможет вам сэкономить немного драгоценного времени.

  1. Установите AutoGenerateEditButton="False" таким образом, вы можете добавить это поле через ASP-код.

  2. Используйте код ниже, чтобы добавить поле кнопки «Редактировать» к вашему коду gridView следующим образом.

    <asp:commandfield showeditbutton="true" causesvalidation="false" headertext="Edit"/> 
    

Если бы проблема была в проверке, теперь вы могли бы видеть, как ваш модуль Обновления запускается как ожидалось.

2 голосов
/ 23 марта 2011

Установите для свойства GridView EnableViewState значение true.

1 голос
/ 22 октября 2009

Это исправило проблему для меня:

   If Not Master.Page.IsPostBackEventControlRegistered Then

        'logic to bind data

   End If
1 голос
/ 25 июня 2009

Я удалил главную страницу и позволил странице, содержащей GridView, наследовать от Page, и это сработало. Что-то в моем стеке наследования (или что-то в элементах управления MS) не сработало так, как я его настроил.

1 голос
/ 09 июня 2009

Шон,

Я понимаю, что у вас есть ответ сейчас, но для будущих ссылок вам придется создать addhandler и делегат, чтобы делать то, что вы хотели. Сначала я неправильно понял вопрос. Но вот что вы бы сделали, если решили не использовать командное поле.

// Это в загрузке страницы

If Not IsPostBack Then
        'Create new column for Edit buttons
        'Dim field As New TemplateField
        Dim actionfield As New TemplateField


        actionfield.HeaderText = "Action"
        Dim actioncol As DataControlField = actionfield
        GridView1.Columns.Insert(8, actioncol)//the eight is the column number of where you are adding the column. below you will add the button. You really don't need to add this column programmtically. I normally do though.

    End If

// rowcreated

 If e.Row.RowType <> DataControlRowType.footer Then
            btnedit.ToolTip = "Edits the Current Record"
            btnedit.ImageUrl = "\images\bttnEditMini.gif"
            GridView1.Rows(i).Cells(8).Controls.Add(btnedit)
            btnedit.CommandName = "view"//notice commandname. You can manipulate it.
            btnedit.CommandArgument = GridView1.Rows(i).Cells(0).Text
            AddHandler btnedit.Click, AddressOf btnedit_Click
 end if

// затем обратите внимание, что вы должны создать делегат imageclickeventhandler

 Public Delegate Sub ImageClickEventHandler(ByVal sender As Object, ByVal e As ImageClickEventArgs)
Sub btnedit_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs)
//whatever actions you need to take.   

end sub
0 голосов
/ 17 июля 2017

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

0 голосов
/ 04 июня 2012

В других ответах на этой странице упоминалось, что ошибка вызвана проверкой. Причина в том, что на странице есть валидаторы, которые вполне могут не относиться к конкретной редактируемой строке, и по какой-то причине они не выполняются. Если вы хотите, чтобы валидаторы работали для текущей редактируемой строки, вы не захотите устанавливать CasuesValidation в false ... Вместо этого вы захотите отключить все ненужные валидаторы, кроме тех, которые вам нужны для редактирования этой строки.

  1. Найдите валидаторы, которых нет в шаблоне элемента редактирования этой строки сетки, установите их отключенными в page_load.
  2. Пусть 'CausesValidation' останется верным в полях команд шаблона (по умолчанию это правда, поэтому вы можете просто исключить его.), Чтобы все в строке, которую вы хотите проверить, все равно было проверено.
  3. Прибыль.
0 голосов
/ 11 января 2010

У меня также есть такая же проблема в Gridview с редактированием, обновлением, отменой. Событие «Редактировать и отменить» запускается, но никогда не обновлять событие. Затем, в конце концов, я изменяю значение CauseValidation на false для параметра «Обновить ссылку» из поля «Изменить шаблон». Это удивительно хорошо работает.

0 голосов
/ 09 июня 2009

Если вы измените имя команды на «update», вам придется обрабатывать обновление в rowcommand, что не должно быть проблемой - верно?

Проверьте этот вопрос, который я задал. Это может помочь

Добавлена ​​
Что-то, что вы можете сделать, это изменить имя команды на то, что вам нравится, и обработать его в Rowcommand. Выполните обновление / вставку базы данных вручную в строке команды.

...