使用datapager时以编程方式数据绑定listview

时间:2014-07-08 17:30:22

标签: asp.net vb.net listview datasource datapager

我有一个listview和两个数据寻呼机。我的listview连接到数据源,其数据是随机排序的。按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 个答案:

答案 0 :(得分:0)

获取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事件添加到listview

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

你有它,希望这对某人有帮助。