我使用 datacolumn.expression快速查看了这篇 MSDN 文章,但一无所获。看起来“选择表达式”语法不支持分页...
问问题
15055 次
2 回答
11
使用 LINQ 可以最简单地创建简单的分页。
dataTable.AsEnumerable().Skip(100).Take(25);
于 2013-03-18T12:57:03.877 回答
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 语句,将其发送到服务器,然后只显示结果。
于 2013-03-18T13:07:02.803 回答