c# – 如何使用简单的页面进行分页?

c# – 如何使用简单的页面进行分页?,第1张

概述我知道如何使用NextToken向SimpleDB数据转发.但是,如何处理以前的页面呢?我在.NET上,但我不认为这很重要.我对总体策略更感兴趣 Mike Culver的An Introduction to Amazon SimpleDB网络研讨会提到使用了面包屑,但他并没有在视频中实现它们. 编辑:视频提到实现向后分页的示例项目,但视频在可以显示下载的URL之前结束.我发现的一个示例项目没有处理 我知道如何使用NextToken向SimpleDB数据转发.但是,如何处理以前的页面呢?我在.NET上,但我不认为这很重要.我对总体策略更感兴趣

Mike Culver的An Introduction to Amazon SimpleDB网络研讨会提到使用了面包屑,但他并没有在视频中实现它们.

编辑:视频提到实现向后分页的示例项目,但视频在可以显示下载的URL之前结束.我发现的一个示例项目没有处理分页.

解决方法 当进入下一页时,您可以通过仅允许“下一页”而不是任意分页来简化用例.您可以使用liMIT子句在SimpleDB中执行此 *** 作:
SELECT Title,summary,Votecount FROM posts WHERE userID = '000022656' liMIT 25

您已经知道如何处理NextToken,但是如果您使用这种策略,则可以通过存储下一个令牌的导航痕迹(例如在Web会话中)来支持“上一页”,并使用以前的NextToken重新发出查询,而不是接下来的一个.

然而,在SimpleDB中处理任意分页的一般情况与前一个和下一个相同.在一般情况下,用户可以点击任意页面号码,如5,而不用访问第4页或第6页.

您可以在SimpleDB中使用NextToken仅需要WHERE子句才能正常工作的事实来处理此问题.所以,而不是按顺序查询每个页面,拉下所有的插入项,通常可以分两步进行.

>发出您的查询,并以所需页面开始的极限值和SELECT count(*)代替所需的实际属性.
>使用第一步中的NextToken使用所需的属性和页面大小作为liMIT来获取实际页面数据

所以在伪代码中:

int targetPage,pageSize;...int jumplimit = pageSize * (targetPage - 1);String query = "SELECT %1 FROM posts WHERE userID = '000022656' liMIT %2";String output = "Title,Votecount";Result temp = sdb.select(query,"count(*)",jumplimit);Result data = sdb.select(query,output,pageSize,temp.getToken());

其中%1和%2是String替换,“sdb.select()”是一个虚构的方法,包括String替换代码以及SimpleDB调用.

您是否可以在对SimpleDB的两次调用(如代码中所示)中完成此 *** 作将取决于WHERE子句的复杂性和数据集的大小.上述代码简化为,如果查询花费超过5秒钟运行,临时结果可能已返回部分计数.你真的想把这一行放在一个循环中,直到达到正确的数值.为了使代码更加现实,我将其放在方法中,并摆脱String替换:

private Result fetchPage(String query,int targetPage){    int pageSize = extractlimitValue(query);    int skiplimit = pageSize * (targetPage - 1);    String token = skipAhead(query,skiplimit);    return sdb.select(query,token);}private String skipAhead(String query,int skiplimit){    String tempquery = replaceClause(query,"SELECT","count(*)");    int accumulatedCount = 0;    String token = "";    do {        int templimit = skiplimit - accumulatedCount;        tempquery = replaceClause(tempquery,"liMIT",templimit + "");        Result tempResult = sdb.select(query,token);        token = tempResult.getToken();        accumulatedCount += tempResult.getCount();    } while (accumulatedCount < skiplimit);    return token;}private int extractlimitValue(String query) {...}private String replaceClause(String query,String clause,String value){...}

这是没有错误处理的一般想法,适用于任意页面,不包括第1页.

总结

以上是内存溢出为你收集整理的c# – 如何使用简单的页面进行分页?全部内容,希望文章能够帮你解决c# – 如何使用简单的页面进行分页?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1260504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存