无法在子网格中选择行:Jqgrid

时间:2012-10-11 12:27:04

标签: jquery-ui jquery jquery-plugins jqgrid

我正在使用jqgrid,并在其中添加了一个子网格,如下所示,

enter image description here

如你所见,
具有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中,只有第一行从子网格中选择

代码中有什么问题吗?为什么我不能在子网格中有多个元素时选择单个元素?

感谢您的时间,谢谢

1 个答案:

答案 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 answerthis one)。