Zpracování operace nad více řádky datagridu v tabcontrolu

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

Ahoj,

snažím se rozchodit datagrid v tabcontrolu pro jednoduchou administraci, ale nedaří se mi zpracovat operaci nad více řádky najednou.

V příkladu k datagridu se v operaci získává formulář přes parent na odesílacím tlačítku a grid pomocí továrničky na komponentu, resp. getComponent(nazev);

Když jsem se pokoušel přepsat si vytvoření datagridu do tabu přes továrničku createComponent($name) místo přímo v metodě createTabXY, tak dostávám chybu při volání metody addComponent, že komponenta tabs již existuje, i když je to podle call stacku první volání addComponent..

Trocha kódu asi vysvětlí lépe:

<?php

	public function createComponent($name)
	{
		switch ($name)
		{
		  case 'personsDataGrid':
		        $model = new MyModel('persons');
		        $grid = new DataGrid;

		        $renderer = new DataGridRenderer;
		        $grid->setRenderer($renderer);

		        $grid->itemsPerPage = 10; // display 10 rows per page
		        $grid->displayedItems = array('all', 10, 20, 50); // items per page selectbox items
			$grid->bindDataTable($model->getPersons($personColumns));
		        $grid->multiOrder = FALSE; // order by one column only
			.
			. atd dle prikladu na datagrid
			.
		        $this->addComponent($grid, $name);

			return;


		  case 'tabs':

		        $tc = new TabControl($this,$name);
		        $tc->mode = TabControl::MODE_LAZY;
		        $tc->sortable = true;

		        $t = $tc->addTab("personsDataGrid");
		        $t->header = "Osoby";
		        $t->contentFactory = array($this,"createTabPersonsDataGrid");

		        $this->addComponent($tc, $name);

			return;


			default:
				parent::createComponent($name);
				return;

		}
	}




    /* Tab factories */

    function createTabPersonsDataGrid($name,Tab $tab){
        return $this->getComponent('personsDataGrid');
    }


    // ### handle na akce nad osobami ###
    function handlePersonsActions(SubmitButton $button)
	{
        $this->flashMessage('aaa', "info");

	$form = $button->getParent();
    	$grid = $this->getComponent('personsDataGrid');
    	$values = $form->getValues();

	$this->flashMessage(debug::dump($values),'info');
    }
}

?>

Nenakopnul byste mě někdo, prosím, jak správně integrovat datagrid s tabcontrolem tak, aby fungovaly hromadné operace? V demu k tabcontrolu je v metodě pro zpracování jen hláška, že jde o demo..

Předem díky

Editoval blacksun (5. 10. 2009 23:32)

blacksun
Člen | 177
+
0
-

Tak nakonec se mi to povedlo vyřešit novým způsobem tvořením komponent createComponent<Name>, kdy ve vytvoření tabu volám toto:

<?php

    function createTabPersonsDataGrid($name,Tab $tab){
        $grid = $this->getComponent('personsDataGrid');

	$grid->render();

    }

?>

Pokud použiju return $grid, tak dostanu výjimku, že komponenta musí být připojena k Tabu.