分页是您如何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 进行分页比上述代码要好得多 - 我只提供该代码是因为您问了关于DataTable 上的Select 方法。最好简单地构造正确的 SQL 语句,将其发送到服务器,然后显示结果。