Ячейка GridView не регистрирует никаких элементов управления в событии RowCommand

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

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

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

Это прекрасно работает.

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

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

c#,asp.net,gridview,rowcommand,

1

Ответов: 4


1 принят

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


1

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


1

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

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


1

Вы можете создать 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
C #, asp.net, GridView, rowcommand,
Похожие вопросы
Яндекс.Метрика