我很快查看了这篇MSDN文章using datacolumn.expression,但一无所获。看起来'select expression'语法不支持分页...
答案 0 :(得分:9)
使用LINQ可以最简单地创建简单分页。
dataTable.AsEnumerable().Skip(100).Take(25);
答案 1 :(得分:3)
分页是您SELECT
数据的一种机制。请考虑以下测试数据:
ID Name Date
1 Bob 1/1/2013
2 Bill 1/3/2013
3 Andy 2/1/2013
...
如果我想要分页数据,而我不关心它是如何排序的,我可以通过ID
来做,所以我可以这样做:
var rows = table.Select().Take(10);
_id = (int)rows.Last()["ID"];
这将给我前十行(即一页)。注意我还将最后的ID
存储到名为_id
的假定类变量中。如何存储或稍后恢复,ID
仅取决于您的计划。现在,如果我需要下一页,我可以这样做:
var rows = table.Select("ID > " + _id).Take(10);
_id = (int)rows.Last()["ID"];
这会给我下一页。但是如果我想按Name
对数据进行排序呢?这改变了一点游戏。请考虑以下代码:
var rows = table.Select("", "Name").Take(10);
_name = rows.Last()["Name"] as string;
将为我提供第一页数据,按Name
排序。但请注意,我将Name
的值存储在假定的类变量_name
中以供日后使用。现在,当我想要下一页时,我需要做这样的事情:
var rows = table.Select("Name > '" + _name + "'", "Name").Take(10);
_name = rows.Last()["Name"] as string;
这会让我看到下一页,但仍按Name
排序。 分页非常重要。
注意: 代码并不像我提出的那么简单。您不能只Take(10)
,因为可能没有10
。此外,您可能无法存储最后ID
或Name
,您可能每次都必须从某个地方恢复它。最后,您可能需要支持多排序,它按多列排序,因此在提供排序时请记住这一点。
最后注意: 利用原始SQL 进行分页比上述代码好得多 - 我只提供了代码,因为你问过关于Select
上的DataTable
方法。简单地构造正确的SQL语句,将其发送到服务器,然后只显示结果会好得多。