关于一个分页中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;

参考技术A 算出总行数rnt
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 已经处理了这个问题,否则如何设置显示的链接数量限制。我只是想要&lt;&lt; 1 2 3 ... 657 658 659 &gt;&gt;,例如。

目前,我的代码如下:

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-&gt;render() !!。当然,这在使用 GET 变量方面非常有效。

我尝试创建一个扩展 BootstrapThreePresenter 的自定义演示者,但我不知道如何链接它,所以一切正常。

我赶紧补充一下,这个问题不是重复的,因为它适用于 Laravel 5.1 - 我看过的所有其他问题都适用于 Laravel 4.*。

【问题讨论】:

我很确定这会干扰资源路由,因为资源路由会认为 /pages/2 是 id 为 2 的页面。 @Rob 实际上,这很好。它不会影响我的特定应用程序,但最好避免以后可能导致问题的事情。 【参考方案1】:

不存在明确的解决方案,但有一些解决方法如下:Laravel pagination pretty URL 或者您可以检查是否有人为此创建了插件。

【讨论】:

我去看看。不过,正如我所说,该解决方案适用于 Laravel 4,但我会看看我是否能弄清楚。

以上是关于关于一个分页中DataSet异常的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在分页中获取特定行的页码

Kotlin - Recyclerview 分页中的问题

在 Yii gridview 分页中保留复选框值

laravel 仅在分页中显示下一个和上一个链接

在 apollo 和 Relay 分页中返回一个 totalCount 字段

UIScrollview 分页中的 UITextview