我正在使用jqgrid,并在其中添加了一个子网格,如下所示,
如你所见,
具有11和13列的行是主网格行
每一行都有子网格感兴趣, Add Record元素显示Add Sub up for Subgrid
以下是子网格的代码,
subGridRowExpanded: function(subgrid_id, row_id) {
var subgrid_table_id, pager_id;
subgrid_table_id = subgrid_id+"_t";
pager_id = "p_"+subgrid_table_id;
$("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>");
jQuery("#"+subgrid_table_id).jqGrid({
url:"shops?q=2&ShopID="+row_id,
datatype: "xml",
colNames: ['Interest'],
colModel: [
//{name:"Id",index:"ShopID",width:80,editable:false,editoptions:{readonly:false,size:40}}, //Shop ID not required
{name:"id",index:"id",editable:true,edittype:"select",editoptions:{dataUrl:'shops?q=3&ShopID='+row_id},editrules:{required:true}}
],
rowNum:10,
pager: pager_id,
width: '100%',
height: '100%',
scrollOffset: 0,
sortname: 'num',
sortorder: "asc",
height: '100%',
editurl:'shops?q=5&ShopID='+row_id
});
jQuery("#"+subgrid_table_id).jqGrid('navGrid',"#"+pager_id,{edit:false,add:true,del:true})
},
subGridRowColapsed: function(subgrid_id, row_id) {
// this function is called before removing the data
//var subgrid_table_id;
//subgrid_table_id = subgrid_id+"_t";
//jQuery("#"+subgrid_table_id).remove();
}
问题是,当子网格中有多个元素时,我可以选择(我使用最新版本的Chrome)但是当子网格中只有单个元素时我会选择它(如果你注意到色差请看第13行下面的子网格元素'Gifts' - 并选择'Gifts'可以删除。
更新 在firefox和IE中,只有第一行从子网格中选择
代码中有什么问题吗?为什么我不能在子网格中有多个元素时选择单个元素?
感谢您的时间,谢谢
答案 0 :(得分:1)
我认为你有id重复的问题。 HTML不允许在具有相同值的相同HTML页面上使用id
属性。所有id
属性的值必须是唯一的。我建议您使用Chrome / IE的开发者工具或使用Firebug来验证您是否遇到问题。您只需检查网格和子网格的id
元素上现有的<tr>
属性。
另一方面,jqGrid的所有行(所有<tr>
元素)成为分配的id
属性。通常,您必须在id
的响应中填写服务器端的url
。问题是人们通常使用来自数据库的id
的值,但是通常只有{em}个在数据库的一个表上,而不是在所有表上数据库。因此,您可以轻松地获得多个jqGrids(或带有子网格的网格)获取具有id重复项的行的方案。
解决问题的最简单方法是使用my suggestion之后在jqGrid中引入的id
选项。主要优点是您可以继续使用数据库中的原始 id值,并使用jqGrid中的idPrefix
属性,这些属性因构建id
属性而是唯一的从服务器返回的id
值,但使用前缀。在the answer。因此,我建议您对所有子网格使用不同的id
。例如,您可以在子网格中使用idPrefixes
(请参阅the answer和this one)。