Динамическое управление в обратной передаче - PullRequest
0 голосов
/ 08 ноября 2011

Я пытаюсь добавить набор LinkButtons к PagerRow GridView в UpdatePanel. Я использую событие RowCreated, чтобы создать и добавить их. У меня проблема в том, что обработчики кликов запускаются только во второй раз.

Я создаю LinkButtons используя

Protected Sub grd_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    If (e.Row.RowType = DataControlRowType.Pager) Then
        Dim pageSizer = New GridViewPageSizer(grdItems)
        e.Row.Cells(0).Controls.AddAt(0, pageSizer)
    End If
End Sub

Для создания самих кнопок ссылок я использую

    Dim lnkSize = New LinkButton() With { _,
        .Text = size.ToString(), _
        .CommandArgument = size.ToString(), _
        .ID = "pageSizer" & size
    }
    AddHandler lnkSize.Click, AddressOf lnkPageSize_Click ' an EventHandler which just changes pagesize based on CommandArgument
    liSize.Controls.Add(lnkSize)

GridViewPageSizer наследует HtmlGenericControl и добавляет обработчик событий для нажатия каждой кнопки. При каждой обратной передаче строка пейджера воссоздается, поэтому старые кнопки заменяются новым набором, а их обработчики событий запускаются только при втором щелчке. Если я проверю! IsPostBack, кнопки исчезают после первого щелчка. Я пытался перепривязать сетку после нажатия кнопок и изменения размера страницы, но происходит то же самое. Есть ли способ обойти это?

1 Ответ

1 голос
/ 08 ноября 2011

Чтобы EventHandler работал правильно, вам нужно привязать его к странице Init / PreInit.

Создайте индикатор сеанса и при обратной передаче проверьте этот сеанс на странице Init.

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

На этот раз события сработают корректно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...