是否有任何方法可以将分页应用于VB.NET win Form中的ListView控件



我正在使用带有ListView控件的windows表单2005 vb.net。现在我想将分页应用于ListView,因为我必须在页面加载中显示该控件中的许多记录。请建议我有任何方法可以将分页应用于ListView。

根据dotNET的建议,ListView不会为您完成分页部分,因此必须在数据访问代码中实现。

至于显示数据页面,如果您希望它对用户无缝,那么您可以考虑虚拟化ListView。如果您对此感兴趣,那么从VirtualMode属性的文档开始,然后从那里开始。

否则,您可以只提供Button向前和向后移动,这将丢弃当前内容并加载一个全新的页面,这会更简单,但对用户来说可能不太好。

您可以通过SQL(TOPLIMIT子句)或LINQ(TAKESKIP函数)在数据源级别应用分页,并在全局变量中跟踪当前页面。然后,当用户在页面之间导航时,您可以动态地填充ListView。

示例

我不知道您的数据源是什么样子的,所以我正在围绕List<Of Anything>编写代码。希望你可以根据你正在使用的集合轻松地转换它:

保留一个Form级别的变量和一个全局PageSize变量。说:

Dim mPageNumber As Integer = 0
Const PAGE_SIZE As Integer = 25

创建用于移动到表单上的下一页/上一页的按钮。在其Click事件中添加以下代码:

mPageNumber += 1 '(or mPageNumber -= 1 in Previous button)
PopulateMyListView()

创建一个新的私有过程来更新ListView的内容:

Private Sub PopulateMyListView()
     MyListView.Clear()
     dim MyCurrentPageItems = MyItemsList.Skip(mPageNumber * PAGE_SIZE).Take(PAGE_SIZE)
     For Each item In MyCurrentPageItems
         MyListView.Items.Add(item.WhateverPropertyYouWantToShow)
     Next
End Sub

Form_Load中也调用此过程一次。

我已经亲手写了上面的代码,所以可能会有一些小的拼写错误等。此外,我还没有添加任何绑定的检查,你应该在你的一端这样做。例如,确保mPageNumber的页数不小于0或大于最大页数。您可以通过简单地将项目总数除以PAGE_SIZE来找到最大页数。

最新更新