【发布时间】:2012-11-23 14:19:38
【问题描述】:
这是我的子网格的声明:
subGrid : true,
subgridtype: 'json',
subGridUrl: 'manuf_subgr.php',
subGridModel: [{ name : ['Package','Sticker','Manufacturer'],
width : [85,50,100],
params: ['Catalogue']
}
],
gridComplete: function() {
var timeOut = 50;
var rowIds = $("#schedule").getDataIDs();
$.each(rowIds, function (index, rowId) {
if(rowId.row_cnt != 0){
setTimeout(function() {
$("#schedule").expandSubGridRow(rowId);
}, timeOut);
timeOut = timeOut + 200;
}
});
}
我期望发生的是这一行 if(rowId.row_cnt != 0) 如果没有从 json 返回的数据,则阻止打开子网格......但无论如何,所有网格都是打开的......
有人可以帮助实施停止以打开空子网格吗?
完整代码:
jQuery("#schedule").jqGrid({
url:'sched.php',
datatype: "json",
mtype:'GET',
colNames:['Street_Date','Label','Catalogue', 'Artist', 'Title','UKDP','UPCEAN','format'],
colModel:[
{name:'Street_Date',index:'Street_Date desc, ID', sorttype:"date", formatter:'date', formatoptions: {newformat:'d/m/Y'}, width:75},
{name:'label',index:'label', width:100,align:"center"},
{name:'Catalogue',index:'Catalogue', width:85},
{name:'Artist',index:'Artist', width:120},
{name:'Title',index:'Title', width:250},
{name:'UKDP',index:'UKDP', width:35, align:"right", formatter:"number", sorttype:"float"},
{name:'UPCEAN',index:'UPCEAN', width:120, align:"center"},
{name:'format',index:'format', width:70, sortable:false}
],
height: "100%",
rowNum:20,
rowList:[10,20,30,50,100],
sortname: 'id',
viewrecords: true,
sortorder: "desc",
jsonReader : {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: true,
cell: "cell",
id: "id",
userdata: "userdata",
subgrid: {root:"rows", repeatitems: true, cell:"cell" }
},
pager: '#schedule_pager',
caption:"Release Schedule",
grouping:true,
groupingView : {
groupField : ['Street_Date']
},
subGrid : true,
subgridtype: 'json',
subGridUrl: 'manuf_subgr.php',
subGridModel: [{ name : ['Package','Sticker','Manufacturer'],
width : [85,50,100],
params: ['Catalogue']
}
],
gridComplete: function() {
var timeOut = 50;
var rowIds = $("#schedule").getDataIDs();
$.each(rowIds, function (index, rowId) {
if(rowId.row_cnt != 0){
setTimeout(function() {
$("#schedule").expandSubGridRow(rowId);
}, timeOut);
timeOut = timeOut + 200;
}
});
},
onSelectRow: function (rowId) {
$("#schedule").jqGrid ('toggleSubGridRow', rowId);
}
});
【问题讨论】:
-
语法
rowId.row_cnt肯定是错误的,因为rowId是一个字符串。你能包括更多的代码吗?row_cnt是网格的某些列的名称吗?哪个datatype有网格?等 -
@Oleg,著名的 jqgrid 专家 ;) 我希望你能看到这篇文章。有趣的是,我从 Tony 帖子的 jqgrid 论坛中获得了这种平静的代码,我在网上搜索并找不到任何关于 row_cnt 方法的信息。但它不会破坏脚本! - trirand.com/blog/?page_id=393/feature-request/… 但现在我意识到我采取了完全错误的方法......仍然找不到更好的......我的意思是 - 应该有一种方法来检查 json 是否返回子网格上的任何数据?
-
在您引用的帖子中,在
if (rowdata.row_cnt) == 0的使用之前存在var rowdata = getDataIDs(rowid);行。所以row_cnt是列名。可能该列已隐藏。你应该更好地描述你有哪些场景。您不能只分析任何通用 JSON 数据并决定是否可以更好地使用子网格显示数据。另一方面,如果您在主网格的 JSON 数据中提供相应的信息,则可以实现对 具有 子网格的项目的扩展。见the answer -
有很多不同的选项。例如,可以将子网格数据与主网格的数据一起加载。 The answer 使用
datatype: local,但思路相同:一个数据源(演示中的myGridData)保存主网格和所有子网格的所有数据. another answer 中描述的问题对您来说可能非常重要。您尝试实现的expandOnLoad: true选项在 jqGrid 中实现不正确。所以你必须用另一种方式来实现它。 -
@Oleg,我希望避免对 db 中的多个表进行一次大查询,因此对子网格有单独的查询......关于你以前的帖子 - 我已经阅读了它。但问题是我在加载完成后打开所有子网格......打开所有子网格看起来很奇怪,然后它们都消失了。查看我更新的代码