Id Name Link Status Action
21 Ebony Bass Temple
22 Uptight Unicorn
23 Inbred Blood Conspiracy
24 Real Thunder Saga
25 Hungry Hummingbird
26 Good Goose
27 Unusual Unicorn
28 Aggressive Angelfish
29 Beautiful Boar
30 Go Go Pogo All-Stars
31 Rock 'n' Roll Metal Assassins
32 Dr. Spelunking Kingdom
33 Amused Alpaca
34 World of Bubble Gone Wild
35 Delightful Dove
36 Anxious Ant
37 Big-Time Chef Blast
38 Rural Chocobo Journey
39 Dynamite Go-Kart Superstar
40 Sonic Monster of Magic
( Items: 21 - 40 from 1000 )
  See the code below 👇 or see GitHub
public function createComponentGrid(): DataGrid
{
	$grid = new DataGrid();

	$grid->setDataSource($this->dibiConnection->select('*')->from('users'));

	$grid->setItemsPerPageList([20, 50, 100]);

	$grid->addColumnNumber('id', 'Id')
		->setSortable()
		->setAlign('left');

	$grid->addColumnText('name', 'Name')
		->setSortable()
		->setEditableCallback(function ($id, $value): void {
			$this->flashMessage(sprintf('Id: %s, new value: %s', $id, $value));
			$this->redrawControl('flashes');
		})->addCellAttributes(['class' => 'text-center']);

	$grid->addColumnLink('link', 'Link', 'this#demo', 'name', ['id', 'surname' => 'name'])
		->setEditableValueCallback(
			function (Row $row) {
				return $row['name'];
			}
		)
		->setEditableCallback(function ($id, $value): string {
			$this->flashMessage(sprintf('Id: %s, new value: %s', $id, $value));
			$this->redrawControl('flashes');

			$link = Html::el('a')
				->href($this->link('this#demo', ['id' => $id]))
				->setText($value);

			return (string) $link;
		})->addCellAttributes(['class' => 'text-center']);

	$grid->addColumnStatus('status', 'Status');

	$inlineEdit = $grid->addInlineEdit();

	$inlineEdit->onControlAdd[] = function ($container): void {
			$container->addText('name', '')
				->setRequired('aaa');
			$container->addText('birth_date', '');
			$container->addText('link', '');
			$container->addSelect('status', '', [
				'active' => 'Active',
				'inactive' => 'Inactive',
				'deleted' => 'Deleted',
			]);
	};

	$inlineEdit->onSetDefaults[] = function (Container $container, Row $row): void {
		$container->setDefaults([
			'id' => $row['id'],
			'name' => $row['name'],
			'birth_date' => $row['birth_date']->format('j. n. Y'),
			'link' => $row['name'],
			'status' => $row['status'],
		]);
	};

	$inlineEdit->onSubmit[] = function ($id, $values): void {
		$this->flashMessage('Record was updated! (not really)', 'success');
		$this->redrawControl('flashes');
	};

	$inlineEdit->setShowNonEditingColumns();

	return $grid;
}