4

我使用 datacolumn.expression快速查看了这篇 MSDN 文章,但一无所获。看起来“选择表达式”语法不支持分页...

4

2 回答 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采取。此外,您可能无法仅存储最后一个IDName,您可能每次都必须从某个地方恢复它。最后,您可能需要支持多重排序,它按多列排序,因此在提供排序时也要记住这一点。

最后注意:利用原始 SQL进行分页比上述代码要好得多- 我只提供该代码是因为您询问SelectDataTable. 最好简单地构造正确的 SQL 语句,将其发送到服务器,然后只显示结果。

于 2013-03-18T13:07:02.803 回答