Datagrid – Non-existing column

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

zdravím,
mám problém s datagridem, najednou mi začal hlásit Non-existing column, ikdyž tam ten sloupeček je. Problém je jenom se sloupečkem „privilege“

public function getRules() {
        return dibi::dataSource('SELECT
                a.id,
                ro.id as rid,
                a.allowed as allowed,
                ro.name as role,
                re.name as resource,
                p.name as privilege
                FROM [' . self::ACL_TABLE . '] a
                JOIN [' . self::ROLES_TABLE . '] ro ON (a.role_id = ro.id)
                LEFT JOIN [' . self::RESOURCES_TABLE . '] re ON (a.resource_id = re.id)
                LEFT JOIN [' . self::PRIVILEGES_TABLE . '] p ON (a.privilege_id = p.id)
        ');
    }

v presenteru:

...
$dataSource = $data->getRules();
$grid->bindDataTable($dataSource);
$grid->addColumn('privilege', 'Akce');
$grid->addColumn('role', 'Role');
$grid->addColumn('resource', 'Zdroj');
...

když ten řádek s column privilege zakomentuju, vše funguje, nechapu prošel jsem to asi milionkrát a chybu nevidím…
používám Nette Framework 1.0-dev (revision e6eaa61 released on 2010–05–01), PHP 5.3.2 ale v tom snad problem není
díky za jakoukoli odpověď

Mira Nyklicek
Člen | 2
+
0
-

Měl jsem stejný problém, konkrétně se tahle chyba projevovala u sloupců, který byly NULL.
Existenci sloupce v datasourcu datagrid testuje pomocí funkce isset(), která na hodnotě NULL vrací FALSE.

Řešením tedy je nahradit na řádku 556 v DataGridRenderer.php

!isset($data[$column->getName()])

za

!array_key_exists($column->getName(), $data)
Honza Kuchař
Člen | 1662
+
0
-

Pište prosím vše co se týká data gridu do vlákna s datagridem. Nikoli do sekce pro hlášení chyb v Nette.