AJAX バインディングで Telerik Grid MVC を使用しています。
グリッドに IQueryable を提供すれば、ページング/ソート/フィルタリングはデータベース サーバーで行われるのではないかと考えました。そのようです:
[GridAction]
public ActionResult Select()
{
return View(new GridModel(Mapper.Map<IEnumerable<DokumentVM>>(db.Dokumenti)));
}
データベースに約 10000 ドキュメントのテスト データを作成し、上位のコマンドによって、それぞれがグリッドに運ばれました。そして明らかに、それは永遠にかかります。
グリッドは、次のように AJAX 経由でバインドされます。
@(Html.Telerik().Grid<ViewModels.DokumentVM>()
.DataBinding(b => b.Ajax().Select("Select", "Dokument"))
.Pageable(p => p.PageSize(20))
.Sortable(s => s.SortMode(GridSortMode.MultipleColumn).OrderBy(m => { m.Add("Date").Descending(); m.Add("Number").Descending(); })))
Select ActionMethod 内で Request (そのフォーム) を調べると、グリッドが適切に機能するために必要なすべての情報を送信していることがわかります。
page: 1
size: 20
orderBy: Date-desc~Number-desc
しかし、データベースに送信された SQL コマンドをさらに調べると、SELECT コマンドのみが存在し、WHERE も ORDER by も何もないことがわかり、すべてのデータが失われます。
ページング/ソート/フィルタリングが自動的に機能する可能性があるかどうか、またはグリッドから送信された情報を自分で SQL コマンドに変換する必要があるかどうか疑問に思っています。必要なのは IQueryable を提供することだけであり、残りは Grid が行うという印象を受けました。しかし、それは私にはうまくいきません。
たぶん私は何か間違ったことをしているのですか、それともこれは不可能ですか?