Ячейка GridView не регистрирует никаких элементов управления в событии RowCommand - PullRequest
1 голос
/ 17 июня 2009

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

Вот основы моей дилеммы:

У меня есть GridView на странице ASPX, которая загружается в CodeBehind. Каждая строка содержит пару кнопок, которые запускают событие OnRowCommand. Когда кто-то нажимает кнопку «Изменить», я создаю объект TextBox и добавляю его в коллекцию элементов управления определенной ячейки.

Это отлично работает.

Проблема в том, что, когда человек нажимает кнопку «Сохранить», OnRowCommand снова запускается, но ячейка регистрирует 0 элементов в коллекции Controls. Я почти уверен, что это происходит до PostBack, поэтому я не уверен, почему не могу получить доступ к элементу управления TextBox.

Я проверил после первоначального добавления TextBox, и он показывает 1 элемент управления в ячейке. Где-то между загрузкой страницы с текстовыми полями и нажатием кнопки эти элементы управления пропали. Google не сильно помог. Есть идеи?

Ответы [ 4 ]

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

Вы можете создать addhandler с делегатом, когда создаете свою кнопку за кодом. обработчик сработает раньше, чем команда row.

 Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated

Dim btnsave As New ImageButton
If e.Row.RowType <> DataControlRowType.Pager And e.Row.RowType <>  DataControlRowType.Header Then
    AddHandler btnedit.Click, AddressOf btnedit_Click
    GridView1.Rows(i).Cells(8).Controls.Add(btndel)
end if

end sub

Public Delegate Sub ImageClickEventHandler(ByVal sender As Object, ByVal e As ImageClickEventArgs)
Sub btnedit_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs)

//do whatever you want here.
//possibly a redirect to the current page so nothing else fires

end sub
1 голос
/ 17 июня 2009

Когда пользователь нажимает кнопку редактирования, вы находитесь в режиме редактирования для GridView. Вам тоже нужно это настроить?

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

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

Я бы лично предложил придерживаться ItemTemplates и немного освободиться от головной боли, которую все это может обеспечить.

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

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

...