为什么我的free-jqgrid没有显示数据?

时间:2017-11-13 18:20:41

标签: jquery jqgrid free-jqgrid

CONTEXT

我正在努力将一个非常大的应用程序与许多自定义网格迁移到jqgrid-free。所有的网格都在现有的代码中工作,但是现有的大部分工作并没有很好地转化,这是令人沮丧的。为什么以下网格定义没有显示数据但仍然没有错误?

CODE

{
            datastr: val,
            altRows: true,
            datatype: 'jsonstring',
            sortable: false,
            width: Global.bodyWidth() - 14,
            colNames: [],
            rowNum: 10000,
            colModel: col_model,
            onCellSelect: function(id){
                $this.grid_select_id_array = [id];
                $this.setDefaultMenu();
            },
            ondblClickRow: function() {
                $this.onGridDblClickRow();
            },
            gridview: true,
            treeGrid: true,
            treeGridModel: 'adjacency',
            treedatatype: 'local',
            ExpandColumn: 'name',
            multiselect: false,
            jsonReader: {
                repeatitems: false,
                root: function( obj ) {
                    return obj;
                },
                page: function( obj ) {
                    return 1;
                },
                total: function( obj ) {
                    return 1;
                },
                records: function( obj ) {
                    return obj.length;
                }
            }
        }

FIDDLE

这里有一个小提示,可以更详细地显示数据的样子: 请参阅:https://jsfiddle.net/catbadger/mhvzerdg/18

1 个答案:

答案 0 :(得分:1)

我建议您在创建网格时填充网格中的数据。在创建网格后直接调用始终setData方法更有效。此外,free jqGrid允许使用datatype: "local"data作为输入数据创建TreeGrid。选项jsonReader和许多其他选项将不再需要。你可以只使用

var grid_setup = {
        altRows: true,
        width: $('body').width(),
        treeGrid: true,
        treeGridModel: 'adjacency',
        ExpandColumn: 'name',
        multiselect: false
    };
grid = new TTGrid('grid_here',grid_setup,columns, "", result_data);

请参阅https://jsfiddle.net/OlegKi/mhvzerdg/19/

更新:如果您想了解为什么您的原始代码不起作用,您可以查看另一个演示https://jsfiddle.net/OlegKi/mhvzerdg/20/,它只修复选项{{1} } treedatatype: 'local'和更改

treedatatype: 'jsonstring'

this.setData = function( data ) {
    if ( this.grid ) {
        this.grid.clearGridData();
        this.setGridParam({data: data});
        this.reloadGrid();
    } else {
        throw('ERROR: Grid is not ready yet.');
    }
}

我仍然建议您按照我的第一个演示并在创建过程中填充网格。