Программный просмотр списка данных при использовании datapager
У меня есть просмотр списка и два пейджера данных. Мой просмотр списка подключен к источнику данных, данные которого упорядочены случайным образом. ЗАКАЗАТЬ NEWID()
Как вы можете себе представить, каждый раз, когда я выбираю страницу или нажимаю следующую / предыдущую страницу, все данные рандомизируются, что делает пейджер данных совершенно бесполезным.
Я подумал, что мог бы установить источник данных, когда страница не была отправлена обратно, а затем программно установить источник данных на просмотр списка, но теперь при выборе страницы или нажатии кнопок "следующий / предыдущий" страница просто не меняется…
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim dv As DataView = sdsMembres.Select(DataSourceSelectArguments.Empty)
lvListMembres.DataSource = dv
lvListMembres.DataBind()
DataPager2.PagedControlID = "lvListMembres"
DataPager3.PagedControlID = "lvListMembres"
DataPager2.DataBind()
DataPager3.DataBind()
End If
End Sub
Что мне не хватает / есть ли лучший способ сделать это. Порядок ДОЛЖЕН быть случайным, и я ДОЛЖЕН иметь пейджеры данных отдельно от просмотра списка.
Спасибо!
1 ответ
Возьмите код между оператором If и поместите его в отдельную функцию.
Добавьте метод хранения данных, в этом конкретном случае я буду хранить его как DataTable в сеансе.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
' Clear datatable from session
Session("CourtierList_dt") = Nothing
' Set datasource to listview and save in a session variable
SetCourtierList()
End If
End Sub
Protected Sub SetCourtierList()
Dim dt As DataTable
If Session("CourtierList_dt") Is Nothing Then
Dim dv As DataView = sdsMembres.Select(DataSourceSelectArguments.Empty)
Session("CourtierList_dt") = dv.ToTable
End If
dt = Session("CourtierList_dt")
lvListMembres.DataSource = dt
lvListMembres.DataBind()
DataPager2.PagedControlID = "lvListMembres"
DataPager3.PagedControlID = "lvListMembres"
DataPager2.DataBind()
DataPager3.DataBind()
End Sub
Кроме того, обязательно добавьте событие PagePropertiesChanging в просмотр списка.
Protected Sub lvListMembres_PagePropertiesChanging(sender As Object, e As System.Web.UI.WebControls.PagePropertiesChangingEventArgs) Handles lvListMembres.PagePropertiesChanging
DataPager2.SetPageProperties(e.StartRowIndex, e.MaximumRows, False)
DataPager3.SetPageProperties(e.StartRowIndex, e.MaximumRows, False)
SetCourtierList()
End Sub
И вот, надеюсь, это кому-нибудь пригодится.