Пример использования treegrid с динамической подгрузкой данных.

Для создания таблицы с деревом необходимо:

1. Настроить treegrid на стороне клиента;
2. Установить свойство $this->treegrid = 'adjacency' внутри метода init.
3. В функции parseRow вручную задать значения колонок level, parent, isLeaf, expanded.
4. Дополнить SQL-запрос таким образом, чтобы за раз он выбирал только один уровень.

Разумеется, вы можете использовать любые другие модели treegrid, а также загружать все дерево сразу целиком.
Просто модифицируйте вывод таким образом, как вам удобно.
higrid.net嗨网提供电子表格、在线图形等互联网开发及运营技术,提供相关资料及软件下载,分享奇趣网络时事评论!欢迎访问。


部分内容为俄文,higrid计划翻译一下。敬请期待!

php代码和js代码请点击tab查看。
<?php

class jqOutTree extends jqGrid
{
    protected $do_count = false;

    protected function init()
    {
        #Set tree grid mode
        $this->treegrid = 'adjacency';

        #Set database table
        $this->table = 'tbl_tree';

        $this->level = intval($this->input('n_level', 0));
        $this->parent_id = intval($this->input('nodeid', 0));

        $this->query = "
			SELECT {fields}
			FROM tbl_tree t
			WHERE {where} AND t.parent_id='{$this->parent_id}'
		";

        #Set columns
        $this->cols = array(

            'id' => array('label' => 'ID',
                'db' => 't.id',
                'width' => 8,
                'align' => 'center',
            ),

            'parent_id' => array('hidden' => true,
                'db' => 't.parent_id',
            ),

            'node_name' => array('label' => 'Node name',
                'db' => 't.node_name',
                'width' => 55,
            ),

            'price' => array('label' => 'Price',
                'db' => 't.price',
                'width' => 15,
            ),

            'has_child' => array('hidden' => true,
                //do we have any children?
                'db' => '(SELECT id FROM tbl_tree WHERE parent_id=t.id LIMIT 1)',
            ),
        );
    }

    protected function parseRow($r)
    {
        #Fields required to build tree grid
        $r['level'] = $this->input('nodeid') ? ($this->level + 1) : 0;
        $r['parent'] = $r['parent_id'];
        $r['isLeaf'] = $r['has_child'] ? false : true;
        $r['expanded'] = false;

        return $r;
    }
}
<script>
    var opts = {
        'treeGrid':true,
        'treeGridModel':'adjacency',
        'ExpandColumn':'node_name',

        'viewrecords':false
    };

    <?= $rendered_grid ?>
</script>