代码之家  ›  专栏  ›  技术社区  ›  RobertPitt

使用ListView分页

  •  0
  • RobertPitt  · 技术社区  · 13 年前

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

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

    我考虑的两种分页类型是:

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

    我会用另一种方式 更喜欢 要做的是:

    • 有几个标签列表 a-f 它将按列表的第一个字符对列表进行排序,并查看是否在范围内。

    我一直在想办法做到这一点;有人有什么好的例子或资源吗?

    数据将随1个主请求进入,并存储在内存中,很快就会存储在缓存的XML文件中以释放内存,因此如果从该文件读取数据更快,那么就可以了。

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

    2 回复  |  直到 13 年前
        1
  •  1
  •   dexter    13 年前

    如果您想在应用程序的LDAP层中请求分页数据,那么GUI将只显示一个页面,询问您想要显示的页码。就LDAP而言,我相信 DirectorySearch System.DirectoryServices类 具有分页功能:

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

        2
  •  0
  •   KeithS    13 年前

    我不知道选项卡,但您当然可以为a-z设置一行按钮或链接按钮。选项卡用于将控件组织到多于数据的页面中;使用选项卡将要求您在每个选项卡页上都有一个列表视图。

    我将创建一个lookup用户控件,特别是如果这个功能将在多个地方使用。对于布局,您所要做的就是创建UserControl,并将其放到ListView和任何希望用作按钮、链接按钮的导航控件中。您可以考虑使用flowlayoutpanel或类似工具动态执行此操作。

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

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

    现在,导航控件操作pagenumber并告诉ListView使用上面的LINQ将自己重新绑定到新页面的数据。

    对于第一个字符的快速访问,这在LINQ中同样很容易做到。不要跳过x行直到进入cs,只需过滤掉所有不以c开头的行:

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

    如果您知道数据源返回有序结果,那么可以使用skipuntil()来查找cs,但是您将遍历大量记录,并且许多LINQ提供程序可以转换skip和take,但不能转换skipwhile、skipuntil等。