4

datacolumn.expressionを使用してこのMSDNの記事をすばやく表示しましたが、何も見つかりませんでした。'selectexpression'構文はページングをサポートしていないようです...

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"];

これで最初の10行(つまり1ページ)が得られます。ID最後のものも、という名前の想定されるクラス変数に格納していることに注意してください_idIDプログラムにのみ依存する、保存方法、または後で回復する方法。次のページが必要な場合は、次のようにすることができます。

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を利用する方がはるかに優れていSelectメソッドについて質問したため、このコードのみを提供しDataTable。正しいSQLステートメントを作成してサーバーに送信し、結果を表示するだけの方がはるかに優れています。

于 2013-03-18T13:07:02.803 に答える