Классический сценарий: взять пользовательский ввод, получить результат поиска и отобразить его на страницах для пользователя. Затем мне нужно отобразить кнопки для First, Next, Previous и т. Д., И я поддерживаю текущую страницу пользователя в viewstate. Все хорошо, отлично работает.
Тогда мне нужно реализовать кликабельные номера страниц, т.е. 1-2-3-4-5-6 и т. Д.
Оказание их просто. Я генерирую элемент управления кнопкой ссылки во время выполнения, добавляю командный аргумент с номером страницы и добавляю к нему обработчик, поэтому необходимо обрабатывать щелчки. Затем я добавляю его в заполнитель, и он отображается, как и ожидалось.
Но тогда ... Если бы у меня еще не было бритой головы, я бы выдернул волосы, чтобы каждый раз происходило событие, как ожидалось.
Как мне это сделать, чтобы мои события всегда были подключены и могли запускаться при вызове кнопок пейджинговой связи?
Ниже приведены важные части кода, некоторые псевдо, чтобы облегчить (надеюсь) понимание того, что я делаю.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Search()
End If
End Sub
Sub Search
'Misc databinding stuff, searches and displays results for the page specified in Me.CurrentPage
RenderPagingControls()
End Sub
Sub RenderPagingControls
'loop throug pagenumbers, Build a linkbutton control, add it to a placeholder
AddHandler lbn.Click, AddressOf lbnNumber_Click
lblPageNumbers.Controls.Add(lbn)
...
End Sub
Protected Sub lbnNumber_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim b As LinkButton = CType(sender, LinkButton)
Me.CurrentPage = CInt(b.CommandArgument)
Search()
End Sub
Public Property CurrentPage() As Integer
Get
Dim o As Object = Me.ViewState("CurrentPage")
If o Is Nothing Then
Return 1
Else
Return CType(o, Integer)
End If
End Get
Set(ByVal value As Integer)
Me.ViewState("CurrentPage") = value
End Set
End Property
Protected Sub lbnNumber_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim b As LinkButton = CType(sender, LinkButton)
Me.CurrentPage = CInt(b.CommandArgument)
Search()
End Sub