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

Why is my free-jqgrid showing no data?

上下文

我正在努力将具有许多自定义网格的非常大的应用程序迁移到 jqgrid-free。所有的网格都在现有代码中工作,但是现有的大部分工作并没有像预期的那样很好地转换,而是令人沮丧。为什么下面的网格定义没有显示任何数据却给出零错误?

代码

{
            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

这里 fiddle 更详细地展示了数据的样子: 请参阅 fiddle,网址为:https://jsfiddle.net/catbadger/mhvzerdg/18

我建议您在创建 网格的过程中 填充网格中的数据。创建网格后直接调用 always setData 方法更有效。此外,免费的 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/,只是将选项 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.');
    }
}

this.setData = function( data ) {
    if ( this.grid ) {
        this.grid.clearGridData();
        if (this.grid.getGridParam("treeGrid")) {
            this.setGridParam({
                datatype: "jsonstring",
                datastr: data
            });
        } else {
            this.setGridParam({data: data});
        }
        this.reloadGrid();
    } else {
        throw('ERROR: Grid is not ready yet.');
    }
}

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