我正在使用带有ListView控件的windows表单2005 vb.net。现在我想将分页应用于ListView,因为我必须在页面加载中显示该控件中的许多记录。请建议我有任何方法可以将分页应用于ListView。
根据dotNET的建议,ListView
不会为您完成分页部分,因此必须在数据访问代码中实现。
至于显示数据页面,如果您希望它对用户无缝,那么您可以考虑虚拟化ListView
。如果您对此感兴趣,那么从VirtualMode
属性的文档开始,然后从那里开始。
否则,您可以只提供Button
向前和向后移动,这将丢弃当前内容并加载一个全新的页面,这会更简单,但对用户来说可能不太好。
您可以通过SQL(TOP
和LIMIT
子句)或LINQ(TAKE
和SKIP
函数)在数据源级别应用分页,并在全局变量中跟踪当前页面。然后,当用户在页面之间导航时,您可以动态地填充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
来找到最大页数。