Tip: Note that $limit and $offset parameters are appended to the dataLoader callback.
Tip: U can use [Ctrl] + arrow left/right to turn pages (make sure you've clicked inside the grid before to make it focused)
Name Surname Country
Katariina Aavikko is
Semrawit Abaalom pl
Asmeret Abdullah fr
Elen Abdullah ch
Birikti Abel us
Hana Abraham hu
Shishay Abraham us
Tekle Abrha fi
Jennifer Ackerman cz
Huriyyah Adonay be
Meis Adriaans is
Faiz Adriaensen is

Code

# PaginationGrid.php


class PaginationGrid extends BaseGrid
{

	/** @return void */
	protected function build()
	{
		parent::build();

		$this->setPrimaryKey('id');
		$this->addColumn('firstname', 'Name')->setSortable();
		$this->addColumn('surname', 'Surname')->setSortable();
		$this->addColumn('country_code', 'Country')->setSortable();

		$this->setPagination(12, [$this, 'userCounter']);
		$this->setDataLoader([$this, 'dataLoader']);
	}


	/**
	 * @param  PaginationGrid $grid
	 * @param  array $filters
	 * @return Nette\Database\Table\Selection
	 */
	public function userCounter(PaginationGrid $grid, array $filters)
	{
		return $this->database->table('user')->count('*');
	}


	/**
	 * @param  PaginationGrid $grid
	 * @param  array $filters
	 * @param  array $order
	 * @param  int $limit
	 * @param  int $offset
	 * @return Nette\Database\Table\Selection
	 */
	public function dataLoader(PaginationGrid $grid, array $filters, array $order, $limit, $offset)
	{
		$users = $this->database->table('user');

		// sorting
		foreach ($order as $column => $dir) {
			$users->order($column . ($dir === TwiGrid\Components\Column::DESC ? ' DESC' : ''));
		}

		// pagination
		$users->limit($limit, $offset);

		return $users;
	}

}
	

# BaseGrid.php


use Nette\Http\Session as NSession;
use Nette\Database\Context as NdbContext;


abstract class BaseGrid extends TwiGrid\DataGrid
{

	/** @var NdbContext */
	protected $database;


	/**
	 * @param  NSession $session
	 * @param  NdbContext $database
	 */
	public function __construct(NSession $session, NdbContext $database)
	{
		parent::__construct($session);
		$this->database = $database;
	}


	/** @return void */
	protected function build()
	{
		parent::build();
		$this->setRecordVariable('user');
	}

}