使用ListView进行分页

时间:2010-11-16 19:54:12

标签: c# listview pagination

我正在寻找一种很好的分页列表视图技术

目前我正在为我工​​作的公司构建一个Active Directory(LDAP)管理器,该公司拥有超过12,000名员工,我们需要能够轻松浏览这些

我正在考虑的两种分页是:

  • 绑定控件右上角的< >,这将按(page * limit) - 1
  • 计算偏移量

喜欢的另一种方式是:

  • 列出a-f的多个标签,这些标签会按照第一个字符对列表进行排序,并查看是否在范围内。

我坚持要做到这一点的方法;有没有人有任何好的例子或资源?

数据即将发布,有1个主要请求并存储在内存中,很快就会存储在缓存的XML文件中以释放内存,所以如果从那里读取会更快,那就没关系。

我正在使用.NET Framework 4.0并绑定到WinForms。

2 个答案:

答案 0 :(得分:1)

您想要在应用程序的LDAP层请求分页数据,gui将只显示要询问您要显示的页码的页面。现在就LDAP而言,我相信System.DirectoryServices的 DirectorySearcher类具有分页功能:

http://msdn.microsoft.com/en-us/library/system.directoryservices.directorysearcher(VS.80).aspx

答案 1 :(得分:0)

我不知道选项卡,但你当然可以为A-Z设置一排按钮或LinkBut​​tons。标签用于将控件组织成页面而不是数据;使用制表符要求你在每个TabPage上都有一个ListView。

我会创建一个查找UserControl,特别是如果在多个地方使用此功能。对于布局,您只需创建UserControl,然后将ListView和任何导航控件放入按钮,LinkBut​​tons等等。您可以考虑使用FlowLayoutPanel或类似方法动态执行此操作。

对于代码隐藏,您需要能够在页面中获得结果。 Linq的首选方式是:

var onePage = userDataSource.Skip((pageNumber-1)*perPage).Take(perPage);

现在,您的导航控件操纵pageNumber并告诉ListView使用上面的Linq将自身重新绑定到新页面的数据。

对于第一个角色的快速访问,在Linq中再次这样做很容易。在您进入Cs之前,不要跳过X行,只过滤掉所有不以C开头的行:

var startswithC = userDataSource
    .Where(x=>x.StringID.StartsWith('C'))
    .Skip((pageNumber-1)*perPage).Take(perPage);

如果您知道数据源返回有序结果,则可以使用SkipUntil()来查找Cs,但是您将遍历大量记录,并且很多Linq提供者可以翻译Skip和Take但不能SkipWhile,SkipUntil等