DataGrid – filtrování a bindDataTable

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
toka
Člen | 253
+
0
-

Zdravím.

Mám DataGrid, do kterého potřebuji načítat data podle proměnné, která je předána metodou $_GET. Pokud si proměnou nastavím jako private v rámci prezenteru, tu pak naplním v renderu, může se stát, že createComponent se vytvoří dříve, než-li je proměnná inicializována v renderu – výsledek nefunguje tak, jak má. Pokud řeším situaci následovně:

// ---------------------------------------------------------------------------
public function renderDetailSubscription($id_registrace) {
  $this['clientsGrid']->bindDataTable($this->model->getAllClients($id_registrace));
}

Tak je vše v pořádku, ale z pro mne neznámého důvodu nemůžu jednak využít $grid->allowOperations('');, dojde k výjimce, ale hlavně, a to nechápu, nefunguje mi filtrování – řazení ano. Pokud přesunu načítání dat prostřednictvím modelu přímo do createComponent a definuji id ručně, tedy „natvrdo“, vše funguje tak, jak má.

Z toho plynou dva dotazy – máte někdo nápad, jak situaci řešit, resp. byl by někdo ochoten, alespoň náznakem, mi ukázat, jak toto řešíte vy – pokud potřebujete „propašovat“ proměnnou tak, aby se pomocí ní složil dotaz, jehož výsledek se ocitne v DataGridu – obecně nejen v něm.

Děkuji.

Editoval toka (3. 4. 2010 13:49)

Ondřej Mirtes
Člen | 1536
+
0
-

V továrničce se na proměnnou odkaž pomocí $this->getParam(‚id_registrace‘), anebo čistěji, v actionDetailSubscription:

public function actionDetailSubscription($id_registrace) {
  $this['clientsGrid']->bindDataTable($this->model->getAllClients($id_registrace));
}
toka
Člen | 253
+
0
-

Takze k render navic jeste action? Chapu to dobre?