关于一个分页中DataSet异常的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于一个分页中DataSet异常的问题相关的知识,希望对你有一定的参考价值。
我自己写了一个分页,其中PageSize = 10 //每页显示10条
Page是传入的当前代码,比如:?Page=1
我的目的是从DataSet中,找到相应Page的游标往下数10条,形成一个ID的字符串,比如:
IDAry值:1,2,3,4,5,6,7,8,9,10
把它放到SQL条件中,那么每次点击翻页的时候,都是取出相应的这组数据。
那么出现的问题是:假如最后一页就3条记录,那么当循环的时候,当K=3时,报异常。
于是我在for循环中放入的try....catch块,catch块中不throw;,这样让程序继续执行,拿出最后一页的ID,比如:200,201,202
但是这样虽然达到我的目的了,分页很正常,其实在点击最后一页的时候,程序最后循环做了7次无用功。
我想请教大家,有什么办法不这么做嘛?
我尝试着判断DataSet最后一行,也就是当k=3的时候,第一列(这个DataTbale就一列为索引ID)是否是NULL,空等的写法,都是直接跳到异常,不走break跳出for循环。
附部分代码:虚心请教!
for (int k = 0; k < PageSize; k++)
try
if (k == 0)
IDAry = Ds.Tables[0].Rows[(Page - 1) * PageSize + k][0].ToString();
else
IDAry = IDAry + "," + Ds.Tables[0].Rows[(Page - 1) * PageSize + k][0].ToString();
catch (Exception)
return IDAry;
rnt % 10 就是最后剩余的行数
程序像你那样编程不行,会把不能略过的异常也略过
还有,分页最好是在读取数据的时候,也就是在sql中完成
每次只区需要的那页数据
如果数据特别多的话,你这种方法效率太低
select * from
(select rownum as cnt,a.* from table a)
where cnt between 1 and 10
每次只需要算出between的值放进去就可以了本回答被提问者采纳 参考技术B 加一行判断不就完了吗?
for (int k = 0; k < PageSize; k++)
try
if (k == 0)
IDAry = Ds.Tables[0].Rows[(Page - 1) * PageSize + k][0].ToString();
//这里增加一个条件.意思是如果当前索引小于当前页的行数才显示.
//保证(Page - 1) * PageSize + k不会溢出.
else if((Page - 1) * PageSize + k<Ds.Table[0].Rows.Count)
IDAry = IDAry + "," + Ds.Tables[0].Rows[(Page - 1) * PageSize + k][0].ToString();
else break;
catch (Exception)
return IDAry; 参考技术C 使用这种方式获取数据在数据量大时性能较低。
可以考虑获取数据是数据集中的数据就是已经分页后的数据 参考技术D // 可以判断Rows的行数
int count = Ds.Tables[0].Rows.Count;
for (int k = 0; k < PageSize; k++)
if ((Page - 1) * PageSize + k < count)
IDAry = Ds.Tables[0].Rows[(Page - 1) * PageSize + k][0].ToString();
else break;
在 Laravel 5.1 分页中使用漂亮的 URL
【中文标题】在 Laravel 5.1 分页中使用漂亮的 URL【英文标题】:Using pretty URLs with Laravel 5.1 Pagination 【发布时间】:2016-01-19 06:29:51 【问题描述】:我正在使用 Laravel 5.1 框架编写一个网站,并试图弄清楚如何使用漂亮的 URL(pages/2
而不是 pages?page=2
)。让我感到惊讶的是,他们没有包含可以轻松实现这一点的功能。
我也想知道,除非 Laravel 已经处理了这个问题,否则如何设置显示的链接数量限制。我只是想要<< 1 2 3 ... 657 658 659 >>
,例如。
目前,我的代码如下:
public function index() // I can pass the $page = 1 here (1 being default)
$pages = Page::whereNotNull('approved')->orderBy('created_at', 'desc')->paginate(5);
return view('pages.index', ['pages' => $pages]);
在我看来,最后是!! $pages->render() !!
。当然,这在使用 GET 变量方面非常有效。
我尝试创建一个扩展 BootstrapThreePresenter
的自定义演示者,但我不知道如何链接它,所以一切正常。
我赶紧补充一下,这个问题不是重复的,因为它适用于 Laravel 5.1 - 我看过的所有其他问题都适用于 Laravel 4.*。
【问题讨论】:
我很确定这会干扰资源路由,因为资源路由会认为/pages/2
是 id 为 2 的页面。
@Rob 实际上,这很好。它不会影响我的特定应用程序,但最好避免以后可能导致问题的事情。
【参考方案1】:
不存在明确的解决方案,但有一些解决方法如下:Laravel pagination pretty URL 或者您可以检查是否有人为此创建了插件。
【讨论】:
我去看看。不过,正如我所说,该解决方案适用于 Laravel 4,但我会看看我是否能弄清楚。以上是关于关于一个分页中DataSet异常的问题的主要内容,如果未能解决你的问题,请参考以下文章