I’m using PetaPoco and MvcContrib in my current project.
I had a devil of a time finding a decent example of paging a grid in an efficient manner.
Here’s what I’ve got so far.
The Action should look like this:
——————— public ActionResult Index(int? page) { //Normally, with a big ORM, using AsPagination to lazy Paginate would work fine. //but it’s in-efficient to do this using PetaPoco //var dbPage = Db.Query<SomeModel>(”") // .AsPagination(page ?? 1, 10); //…so we’ll do it the PetaPoco way for efficient results var dbPage = Db.Page<SomeModel>(page ?? 1, 10, “”); //see if the Db really ran efficient sql Trace.Write(Db.LastCommand, “SQL to get resulsts”); //instead of AsPagination use CustomPagination which provides a “TotalItems” param var viewModel = new CustomPagination<SomeModel>( dbPage.Items, (int)dbPage.CurrentPage, (int)dbPage.ItemsPerPage, (int)dbPage.TotalItems); return View(viewModel); } —————————-
————–
@using MvcContrib.UI.Grid;
@using MvcContrib.UI.Pager;
@using MvcContrib.Pagination;
@model IPagination<SomeModel>
@{
ViewBag.Title = “Some Stuff”;
}
<h2>
Some Stuff to Page in a Grid</h2>
<div id=”grid”>
@Html.Grid(Model).AutoGenerateColumns()
</div>
<div id=”pager”>
@Html.Pager(Model).First(”First”).Next(”Next”).Previous(”Prev”).Last(”Last”).Format(”{0}-{1} of {2} ”)
</div>
</div>
————————-
Here is an extension method to wrap up the CustomPagination.
So now the action method can be a bit tighter
And the View needs to look a little something like this:
Hope that helps
-Denis