ublaboo/datagrid: mocný, rychlý, rozšiřitelný, hezký, anglicky dokumentovaný datagrid

Pavel Janda
Člen | 936
+
0
-

:) Díky!
Okey, pokud by se ti to nepovedlo, zařadím to do roadmapy, jen se k tomu nedostanu asi úplně hned. Uvidíme.

Roman Halaxa
Člen | 59
+
0
-

Ahoj,

měl bych dotaz. Jak jednoduše vymažu všechny filtry programaticky?

Use case:
pokud uživatel příjde z presenteru xyz, nechat filtry co jsou zapamatované, jinak smazat a zobrazit grid bez filtru.

Vím že je můžu mazat jednotlivě metodou removeFilter(), ale jde to jednodušeji? Hrabu se ve zdrojáku a nemůžu nic takového najít.

jikki
Člen | 57
+
+1
-

Ahoj lidi,

v datagridu chci používat ty nové happy-inputs 2.x instalované z NPM. Nicméně zlobí to.

Při načtení stránky se happy inputy nezobrazí. Zobrazí se a fungují až poté co stránkuji.

<link rel="stylesheet" type="text/css" href="{$basePath}/node_modules/happy-inputs/src/happy.css">
<script src="{$basePath}/node_modules/happy-inputs/src/nomodule-es5-fallback.js"></script>
<script>
	var happy = new Happy;
	happy.init();
</script>

Došel jsem do fáze kdy se mi zobrazovaly i při načtení, zobrazily se i při stránkování, ale nebylo možné je zaškrtnout.
Také se mi povedla varianta, kdy se zobrazovaly při načtení stránky, ale při stránkování zmizly.
Nejvtipnější byla varianta kdy se mi zobrazovaly při načtení i při stránkování, ale nešly zaškrtnou na všech stránkách :)

Poradí někdo co dělám špatně?

Děkuji

EDIT: zjistil jsem, že to funguje správně, když block s JS dám nakonec <body>.

Editoval jikki (2. 10. 2020 11:33)

marky_v
Člen | 1
+
0
-

Ahoj, mám dotaz. Nefunguje mi funkce setRendererOnCondition na sloupci columnStatus, callbacky v ní se vůbec nezavolají. Na jiných sloupcích to funguje normálně. Čím to může být? Nebo dělám něco špatně?

$this->addColumnStatus('state', "Stav")
			->addOption('active', "aktivní")
			->setClass('btn-primary')
			->endOption()
			->addOption('closed', "uzavřená")
			->setClass('btn-danger')
			->endOption()
			->setRendererOnCondition(function () {return 'xxx';}, function () {return true;})
			->onChange[] = [$this, 'changeState'];

Díky.

Failips
Člen | 54
+
0
-

Ahoj,

pri pouziti pola ako zdroja dat (ArrayResource) sa mi nechce zobrazovat itemDetail. Ako to mozem vyriesit??

Vdaka, Filip.

Zdeno1981
Člen | 97
+
0
-

Ahoj,

začal jsem používat tento doplněk a nevím jestli jsem to někde přehlédnul, je nějaká možnost jak si upravit třídy u tabulky?
potřeboval bych vyhodit třídu: table-striped table-bordered a přidat table-light tak aby nám to grafický ladilo s ostatními tabulky v systému.

Pavel Janda
Člen | 936
+
+1
-

@Zdeno1981 Jasně! Najdeš to zde: https://contributte.org/…emplate.html#…

Zdeno1981
Člen | 97
+
0
-

@PavelJanda děkuju

kralik
Člen | 200
+
0
-

Ahoj,
rád bych se zeptal.
přešel jsem na Nette v3.0.6 a datagrid v6.2.28 a bohužel dostávám chybu.
Na stařsím Nette v2.4.x jsem si předávat ID přes URDL do datagridu. To mi teď již nejde.

Přes url jsem si předal ID takto
https://localhost/…/uzivatele/9

Componenta datagridu

...
 $urlId = (int) $this->request->getParameter('id');
...
if($urlId > 0) {
 $grid->setDefaultFilter(['id' => $urlId]);
}

DataGrid bez ID v URL funguje v pořádku. Jakmile přidám do URL ID dostanu chybu.

TypeError
explode() expects parameter 2 to be string, integer given

Údajně problém zde: Ublaboo\DataGrid\DataSource\NetteDatabaseTableDataSource
Hledám problém už asi 3 hodiny a nemůžu na to přijít.

Mooc díky za radu

Pavel Janda
Člen | 936
+
0
-

@kralik Zkusil bys možná $grid->setDefaultFilter([‚id‘ ⇒ (string) $urlId]);?

kralik
Člen | 200
+
+1
-

Pavel Janda napsal(a):

@kralik Zkusil bys možná $grid->setDefaultFilter([‚id‘ ⇒ (string) $urlId]);?

Ahoj,
tak to jsem fakt LAMA.
Tohle mne nenapadlo…

Moc díky.

Zdeno1981
Člen | 97
+
0
-

Ahoj,

chci se zeptat, jakým způsobem můžu zarovnat text v th vlevo u datumu? který se zarovnává vpravo.

aktuálně to mám takto:

$grid->addColumnDateTime('date', 'training.date')
	->addCellAttributes(['class' => 'text-left'])
	->setFilterDate()
	->setAttribute('type', 'date')
	->setTemplate(__DIR__ . '/../templates/trainingEmployees/grid.date.latte');

Třída se tam sice vloží ale výsledek je takový, že třída text-left je vložená před původní třidu text-right.

Editoval Zdeno1981 (22. 10. 2020 12:14)

Pavel Janda
Člen | 936
+
0
-

@Zdeno1981 setAlign dělá zarovnání obojího. Nevím, jestli to jde separátně, myslím, že ne.

Zdeno1981
Člen | 97
+
+1
-

@PavelJanda tak opět děkuji, v dokumentaci jsem to přehlídnul.

kolsi
Člen | 131
+
0
-
$grid->addColumnStatus('color', 'Color')->setOptions($colors);

Co vše je potřeba k tomu, aby tento typ sloupce fungoval? Nezobrazí mi to selectbox s textem, ale pouze číslo, které je uložené v databázi. Skripty i CSS mám všechny.

pp
Člen | 33
+
0
-

Ahoj,
pouzivam tento datagrid se zdrojem dat NetteDatabaseDataSource. Bohuzel jsem nenalezl v dokumentaci jak se v tom pripade odkazovat na propojene tabulky – predpokladam ze ref a related lze pouzit pouze u Nette Database Explorer (to ale kvuli slozitejsimu dotazu s JOINy nemuzu pouzit).

Query mam ted zadanou takto (otazka zda ty JOINy s tabulkou c resp. d musi byt hned pri definici datasource) protoze by se pouzily az na vyzadani (viz DOTAZ 3)

$query = 'SELECT a.*,c.essid,d.system_cfg,d.modified AS system_cfg_modified FROM `ubnt_sta` a
            INNER JOIN ( SELECT `lastip`, MAX(`modified`) AS max_modified FROM `ubnt_sta` GROUP BY `lastip` ) b
                ON a.lastip = b.lastip AND b.max_modified = a.`modified`
            LEFT JOIN `ubnt_ap` c
                ON a.ap_ip = c.deviceIP
            LEFT JOIN `ubnt_cfg` d
                ON  a.lastip = d.lastip'
        ;

Pokud si ale zobrazim napr. ItemDetail tak se prida ke query „WHERE id = ‚123‘“ a koncim na

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous

Pokud se pokusim upresnit ve sloupci

$grid->addColumnText('id', 'ID', 'a.id') nebo $grid->addColumnText('id', 'ID', 'ubnt_sta.id')

koncim :

Cannot read an undeclared column 'a.id', did you mean 'id'?

Kudy na to ?

2. DOTAZ
lze mit u kazdeho radku ItemDetail vicekrat (s ruznou sablonou) ? (napr. pro zobrazeni poznamek, konfigurace atd)

3. DOTAZ
Jak na bunku v gridu navazat rozsirujici dotaz se zobrazenim vysledku prave v ItemDetail popr. v POPUP okne – napr. najetim mysi na polozku spustit vyhledani v DB a dotazeni hodnot. Mohl by mi nekdo poskytnout nejakou kostru mozneho reseni. Dekuji

jAkErCZ
Člen | 309
+
0
-

Zdravím,
narazil jsem na chybu v datagriu

Ublaboo\DataGrid\Exception\DataGridFilterNotFoundException

Session filter: Filter [_grid_per_page] not found

A za boha nemohu najít kde by mohla být chybka.

Díky

kekw
Člen | 3
+
0
-

Ahoj, mohl by se někdo prosím podělit o kousek kódu, který používá v handleSort metodě na ukládání výsledků drag'n'drop sortu? Něco mám, ale ne a ne to odladit na 100%

pesMamlas
Člen | 7
+
0
-

Ahoj

jedu na Nette 2.4.4 (DataGrid 5.7) projekt a snažím se rozchodit paginator a itemdetail.Bohužel jsem u obou pohořel:

Paginator:

Nastavení mám následující:

$grid->setPagination(TRUE);
$grid->setItemsPerPageList([10, 20, 50, 100, 1000], TRUE);
$grid->setDefaultPerPage(100);

Zobrazí dropdown s hodnotami, ale při změně se nic nezmění (ani AJAX neprojde).

Item Detail

U itemdetailu se zobrazí button, při najetí se zobrazí „dataTable-id=21&SEQ=23do=dataTable-getItemDetail“. Při kliknutí projde AJAX (Tracy), ale nic se nezobrazí. (*id je záznam a SEQ je předek záznamu pro potřeby editace)

$grid->setItemsDetail()->setTitle('Info');
$grid->setTemplateFile(__DIR__ . '\templates\CustomTemplates\dataGridTemplates\item_detail.latte');
{extends $original_template}

{block detail}
	<p>Lorem ipsum ...</p>
{/block}

Můžete mě prosím trošku nakopnout?

Díky moc

martin28
Člen | 31
+
0
-

AHoj, prosim jak to resite?

Pouzivam tento datagrid a super jen jsem na zacatku sveho projektu a casto menim sloupce. Jde o to ze kdyz si nejaky uzivatel filtruje nebo srovnava podle uvedeneho sloupce, ktery ja pak odeberu tak mu to spadne- Jasny je to ulozeny v session a proste se podle toho hleda. Staci pak vymazat cookies ale to asi nejde psat zakaznikum. Nebo pak staci vymazat atresar /temp? Dekuji Martin

ppar
Člen | 336
+
+2
-

@martin28 Zřejmě hledáš https://contributte.org/…filters.html#… .

jikki
Člen | 57
+
0
-

Ahojte lidi,

měl bych 2 dotazy:

  • lze nějak nastavit, aby konkrétní sloupce nebylo možné skrýt a jiné ano? pokud povolím $grid->setColumnsHideable(); tak se dají skrývat všechny. Nicméně hodila by se možnost, aby se skrývání dalo povolit pouze pro určité sloupce.
  • tlačítko s ozubeným kolečkem pro zobrazení/skrytí sloupců zobrazí nabídku sloupců. Při každém kliknutí nabídka zmizí. Lze to udělat tak, aby nabídka zůstala zobrazená dokud se neklikne mimo? tedy chování stejné jako filter multiselect.

Děkuji

dTTb
Člen | 24
+
0
-

@PavelJanda V dokumentaci https://contributte.org/…columns.html#… asi chybi hranate zavorky, je tam

$grid->setDefaultSort('id' => 'DESC', FALSE);

misto

$grid->setDefaultSort(['id' => 'DESC'], FALSE);
Pavel Janda
Člen | 936
+
0
-

@dTTb Cool, díky, poslal bys, pls, PR? Díky!

Gogokt
Člen | 14
+
0
-

Zdravím,

mám dva dotazy:

  1. při small line edit jak kontrolovat vstup uživatele (isRequired atd.) ideálně na straně prohlížeče.
  2. Nezobrazují se mi flashMessage při zpracování handle metod. Vím asi proč ale nevím jak řešit.

    Mám použité Nittro a předpokládám, že to buje v té ajaxizaci.

public function columnNameEdited($id,$value){
            $this->flashMessage("Uloženo", 'success');
            if ($this->isAjax()) {
                    $this->redrawControl('flashes');
                    $this['uzivateleGrid']->reload();
            } else {
                    $this->redirect('this');
            }

        }

Děkuji za pomoc…

Roman Halaxa
Člen | 59
+
0
-

Ahoj,

měl bych asi jednu připomínku k dokumentaci. Možná by nebylo od věci uvést u inline add, že při použití array datasource je nutné při překreslení znovu získat datasource? Alespoň myslím že tomu tak je. Vždycky hledám proč se mi to nechce překreslit a pak si na to vzpomenu :D Jestli je jiná cesta budu rád když se podělíte. Díky

Pavel Janda
Člen | 936
+
0
-

@RomanHalaxa Pošleš pls pr na github? :) Máme tam adresář s dokumentací: https://github.com/…master/.docs Dííky

Roman Halaxa
Člen | 59
+
+1
-

@PavelJanda máš ho tam

Beru zpet, nemáš. Musim zjistit jak se to dělá :D :D

EDIT 2 : tak snad

Editoval Roman Halaxa (27. 11. 2020 14:34)

pavelinnuendo
Člen | 25
+
0
-

Ahoj, prosím, lze nějak nastavit focus na jiný sloupec (než první) při editaci záznamu?

Roman Halaxa
Člen | 59
+
0
-

Ahoj. Narazil jsem že při překreslení gridu (inline edit/add) se znovu nevyhodnocuje allowRowsAction ani setClass. Je to tak zamýšlené nebo mám něco špatně? Děkuju.

Pavel Janda
Člen | 936
+
0
-

@RomanHalaxa To určitě zamýšlené není. Mohl bys, prosím, připravit jednoduchou ukázku tohoto bugu s nějakou sqlite třeba pomocí tohoto sandboxu? Díky moc!

Pavel Janda
Člen | 936
+
0
-

@pavelinnuendo Aktuálně nejde. Ale byla by to super featura! Můžeš poslat PR, rádi ho mergneme. :)

Šaman
Člen | 2496
+
0
-

Ahoj. Je možné nastavit někde defaultní zarovnání sloupců? Chci mít všechno vlevo, pokud neurčím jinak. Teď se mi datumy a čísla zarovnávají vpravo. Je to protected hodnota nastavená přímo ve třídě s definicí sloupce, takže mě nenapadá moc jak to upravit globálně.
A nastavovat setAlign('left') u každého sloupce s datumem není ani čisté (továrna na grid se o vykreslení nemá moc starat) ani pohodlné.
Díky.

Pavel Janda
Člen | 936
+
0
-

@Šaman Globálně to nejde, ale můžeš si třeba odchytit event DataGrid::$onColumnAdd a pro sloupce typu ColumnDateTime nad tím rovnou volat setAlign(left).

pavelinnuendo
Člen | 25
+
0
-

Pavel Janda napsal(a):

@pavelinnuendo Aktuálně nejde. Ale byla by to super featura! Můžeš poslat PR, rádi ho mergneme. :)

ok, rozumím. Spíše jsem myslel, zda by to šlo nějak jednodušeji javascriptem (tam jsem úplně nejslabší). Ale pokud bychom se bavili o pull requestu, měla by to nastavovat metoda na gridu nebo na sloupci?

Šaman
Člen | 2496
+
0
-

Pavel Janda napsal(a):

@Šaman Globálně to nejde, ale můžeš si třeba odchytit event DataGrid::$onColumnAdd a pro sloupce typu ColumnDateTime nad tím rovnou volat setAlign(left).

Díky, tohle funguje (umístěné v továrně).

	$grid->onColumnAdd[] = function($key, Column $column)	{
		$column->setAlign('left');
	};

Ale měl jsem teď zásek na formátování. Mám v tabulce textový sloupec action (tabula logování uživatelských akcí). A v tabulce bylo dost rozhozené formátování, dokud jsem nezjistil, že col-action má natvrdo nastavenou šířku už v CSS v assetech. Nebylo by lepší si pro sloupce typu Column\Action přidat unikátní třídu a jen tu formátovat? Naštěstí pomohl stejný postup, přidat si pro tento případ unikátní třídu a té vynutit width: inherit;white-space: inherit;

	$grid->onColumnAdd[] = function($key, Column $column)	{
		if ($key === 'action' and !($column instanceof Action)) {
			$column->addCellAttributes(['class' => 'col-text-action']);
		}
	};

Editoval Šaman (16. 12. 2020 19:03)

tom
Člen | 148
+
0
-

Ahoj,
chci tento grid začít používat namísto DataGridu od mesoura a chtěl bych se zeptat, lze tady řešit subgridy? A nějaké akce pro vybranou množinu řádků? Např. že si vyberu pár řádků a ty si budu exportovat do XLSX?

Děkuji

Pavel Janda
Člen | 936
+
0
-

@tom subgridy – co přesně tím myslíš? Máš pls ukázku? Nicméně grid v políčku gridu by asi měl jít udělat..

To druhé jde, viz https://contributte.org/…/export.html

jAkErCZ
Člen | 309
+
0
-

Mám dotaz když používám funkci addExportCsv jak si vymezím aby mi to třeba vyexportovalo vždy jen aktuální měsíc?

Díky

Gappa
Nette Blogger | 154
+
+1
-

jAkErCZ napsal(a):

Mám dotaz když používám funkci addExportCsv jak si vymezím aby mi to třeba vyexportovalo vždy jen aktuální měsíc?

Díky

https://contributte.org/…/export.html#…

K tomu by měla sloužit metoda $grid->addExportCsvFiltered(), ta bude exportovat jen to, co je vidět. Nebo to předat jako parametr metodě $grid->addExportCsv().

turbo80
Člen | 34
+
0
-

Ahoj,
mam na vas otazku.
Chtel bych si predelat setConfirmation aby se nezobrazoval Confirm z js confirm();, ale aby se zobrazoval treba http://bootboxjs.com

Vsem dekuji za radu.

Editoval turbo80 (9. 1. 21:30)

petak23
Backer | 15
+
0
-

Ahojte,
mám jeden konkrétny dotaz.
Datagrid mám nainštalovaný cez npm. Vo svojom projekte používam webpack. Ako správne naimportovať js súbory, aby datagrid fungoval? Skúšal som všeličo, aj som prešiel toto fórum a viem že sa to tu už naškrtlo, ale neviem si rady, a stále končím pri chybovej hláške:

Uncaught Error: Include Naja.js or nette.ajax for datagrids to work!

Ako to má byť správne?

Tu je package.json:

...
"dependencies": {
    "@fortawesome/fontawesome-free": "^5.15.0",
    "assets-webpack-plugin": "^5.1.2",
    "axios": "^0.21.1",
    "bootstrap": "^4.5.3",
    "bootstrap-vue": "^2.21.1",
    "jquery": "^3.5.1",
    "lodash": "^4.17.20",
    "naja": "^2.1.1",
    "nette-forms": "^3.1.0",
    "ublaboo-datagrid": "^6.4.1",
    "vue": "^2.6.12"
  },
...

a súbor main.js:

import jquery from 'jquery';
import 'bootstrap/dist/js/bootstrap.bundle';

import naja from 'naja';
document.addEventListener('DOMContentLoaded', naja.initialize.bind(naja));

import datagrid from 'ublaboo-datagrid/assets/datagrid.js';

import netteForms from 'nette-forms';
netteForms.initOnLoad();
window.Nette = netteForms;


import 'ublaboo-datagrid/assets/datagrid-instant-url-refresh.js';
import 'ublaboo-datagrid/assets/datagrid-spinners.js';

Ďakujem za pomoc.

jiri.pudil
Člen | 939
+
+1
-

Ako to má byť správne?

Já si pořád myslím, že by v principu mělo fungovat tohle, tzn. nejlépe použít ProvidePlugin. A doufat, že to nerozbije například nějaká následná minifikace, což si myslím mohl být případ i toho odkazovaného vlákna.

Update: nebyl to případ odkazovaného vlákna. ProvidePlugin zdá se funguje, ale musí se mu napovědět, aby providoval defaultní export:

new webpack.ProvidePlugin({
	naja: ['naja', 'default'],
});

Editoval jiri.pudil (15. 1. 11:20)

pp
Člen | 33
+
0
-

Ahoj,
nejaky cas prochazim diskuze a snazim se zjistit jaky ‘datasource’ je pro muj projekt pri pouziti tohoto datagridu nejvhodnejsi.
Jde o to, ze se snazim propojit nekolik tabulek (kazda ma nekolik desitek tisic zaznamu) a pri tom v nich pouzivat agregacni funkce. V tabulkach pribyvaji aktualnejsi polozky a ja potrebuju pro propojeni pouzit vzdy ty nejaktualnejsi – proto ty subselecty s MAX(modified).
Momentalne mi funguje takovyto dotaz – mam to v DIBI/Fluent ale porad si nejsem jisty, jesli to neni mozne zapsat jinak, lepe, rychleji treba pres DatabaseExplorer nebo jiny datasource.

DISTINCT sta.id, sta.lastip, sta.ap_ip, sta.modified, mgcust.customer_id, mgcust.name, mgcust.address
FROM `ubnt_sta` sta
INNER JOIN (
	SELECT `lastip`, MAX(`modified`) AS sta_max_modified
	FROM `ubnt_sta`
	GROUP BY `lastip`
) sub_sta ON sta.lastip = sub_sta.lastip AND sub_sta.sta_max_modified = sta.`modified`
INNER JOIN (
	SELECT ap1.`deviceIp`, ap1.`modified`
	FROM `ubnt_ap` ap1
	INNER JOIN (
		SELECT `deviceIp`, MAX(`modified`) AS max_modified
		FROM `ubnt_ap`
		GROUP BY `deviceIp`
    ) ap2 ON ap1.deviceIp = ap2.deviceIp AND ap1.`modified` = ap2.max_modified
) ap ON sta.ap_ip = ap.deviceIp
LEFT JOIN `mg_customer` mgcust
    ON mgcust.`ip_nat2` = sta.`lastip` AND mgcust.`state` = 3
Šaman
Člen | 2496
+
0
-

Ve starém projektu ještě stále používám Grido a LeanMapper (nad Dibi) a tam mám úplně stejné Datasource pro složitější tabulky. Sám jsem nečekal, co všechno se dá z Dibi vymáčknout za komplexní dotazy.

Teď už sice používám Datagrid a DatabaseExplorer, ale zas nemám ty složité tabulky, takže jsem zatím nezkoušel psát vlastní Datasource. Imho jde spiš o to co používáš běžně – zapsat to půjde. I kdyby v nejhorším samotnou Nette Core Db.

dTTb
Člen | 24
+
0
-

@pp nevyplatilo by se udelat view a to pak muzes pres Dibi/DatabaseExplorer/… jednoduse pouzit jako datasource?

petak23
Backer | 15
+
0
-

jiri.pudil napsal(a):

Já si pořád myslím, že by v principu mělo fungovat tohle, tzn. nejlépe použít ProvidePlugin. A doufat, že to nerozbije například nějaká následná minifikace, což si myslím mohl být případ i toho odkazovaného vlákna.

Update: nebyl to případ odkazovaného vlákna. ProvidePlugin zdá se funguje, ale musí se mu napovědět, aby providoval defaultní export:

new webpack.ProvidePlugin({
	naja: ['naja', 'default'],
});

Ďakujem pomohlo to.

Pavel Janda
Člen | 936
+
0
-

Doporučuji Dibi.

Ivorius
Nette Blogger | 118
+
0
-

Rád bych dostal resetovací tlačítko (odkaz) filtrace také nahoru nad výpis tabulky – někam k filtrovacím políčkům. Zkusil jsem tedy nasimulovat chování resetovacího tlačítka takto

		$grid->addToolbarButton('dataGrid-resetFilter!', 'reset filtru')
			->setRendererOnCondition(
				function () {
					return Html::el('span'); //nothing
				},
				function () use ($grid) {
					return !$grid->isFilterActive();
				})
			->setClass('ajax btn btn-danger btn-sm reset-filter');

Bohužel při odeslání filtračního formuláře se to nevykreslí, protože se neodesílá snippet kde by byl ten toolbar. Napadá někoho řešení jak dostat resetovací tlačítko nahoru?

Editoval Ivorius (Včera 20:38)

pp
Člen | 33
+
0
-

Děkuji za reakci @Šaman @dTTb @PavelJanda.
Prozatím jsem neměl potřebu řešit ORM, ale ten nový LeanMapper vyzkouším. S DatabaseExplorerem (což pokud dobře chápu je aktuálně podporovaný a perspektivní přístup – i když tady v Datagridu příjdu o ten hezký fluent zápis) jsem si na těchto složitějších dotazech vylámal zuby, ale je pravda, že přes view by to mohlo mohlo být řešitelný.
Na druhou stranu jedná se mi teď o optimalizaci odezvy a už jen použití view mi na mých datech prodloužilo zpracování o cca 20% (interně tomu nerozumím ale prakticky je to tak). Takže v tomto případě asi zůstávám u Dibi.
Existují ještě nějaká best-practice jak dosáhnout co nejrychlejšího načtení dat a stránkovaní v Datagridu? Samotný SQL dotaz zadaný přímo přes PMA je výrazně rychlejší. V MySQL používám cachovaní, na úrovní Nette taky. Díky všem.

Editoval pp (Dnes 9:26)