Программный просмотр списка данных при использовании 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

И вот, надеюсь, это кому-нибудь пригодится.

Другие вопросы по тегам