为什么我的 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.');
}
}
我仍然建议您按照我的第一个演示并在创建过程中填充网格。
上下文
我正在努力将具有许多自定义网格的非常大的应用程序迁移到 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.');
}
}
我仍然建议您按照我的第一个演示并在创建过程中填充网格。