jqgrid嵌套子网格第4级子网格总是返回子网格的第一个rowid

时间:2012-04-20 04:57:02

标签: jquery jqgrid nested subgrid

jqGrid v4.3.2
IE9
win7enterprise

我正在使用以下代码生成子网格:

http://www.trirand.com/blog/jqgrid/jqgrid.html - >高级 - >网格为子网格

我这样做,我有

第1级子网格确定
二级子网格确定
第3级子网格确定
第4级子网格它为第3个Lvl sg的每一行加载子网格OK,但它只显示第3个Lvl sg的第一行id的数据

当我检查开发人员工具时,我发现请求总是发送第三个子网格的第一行的id,我知道如何使用postData附加我已经尝试过的自定义参数,以及来自Oleg K的这个答案{{ 3}}(这个在我的情况下不起作用,数据没有添加到请求中)

我试图从以下事件返回rowdid但没有运气,它仍然返回第三个子网格的第一行id,因此,对于第三个子网格中的每一行,子子网格总是返回相同的。

subGridRowExpanded  //always returns first row id of the third grid
onSelectRow  //doesn't fire if we click the + icon for expanding the subgrid
beforeSelectRow  //doesn't fire at all

另一个奇怪的行为是,如果我点击第三级子网格上的任何一行,它只会选择第一行。

不,使用treegrid不是一个选项,抱歉。

我正在考虑在第3级子网格的每一行的加号图标(第一个单元格)上绑定click事件并触发expandSubGridRow,但问题仍然存在,如何获取我单击的行的rowid <第三级子网格的em> ?

致以最诚挚的问候和感谢,非常感谢任何帮助。

jQuery("#listsg11").jqGrid({
    url:'server.php?q=1',
    datatype: "xml",
    height: 190,
    colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
    colModel:[
        {name:'id',index:'id', width:55},
        {name:'invdate',index:'invdate', width:90},
        {name:'name',index:'name', width:100},
        {name:'amount',index:'amount', width:80, align:"right"},
        {name:'tax',index:'tax', width:80, align:"right"},      
        {name:'total',index:'total', width:80,align:"right"},       
        {name:'note',index:'note', width:150, sortable:false}       
    ],
    rowNum:8,
    rowList:[8,10,20,30],
    sortname: 'id',
    viewrecords: true,
    sortorder: "desc",
    multiselect: false,
    subGrid: true,
    caption: "Grid as Subgrid",
    subGridRowExpanded: function(subgrid_id, row_id) {
        var subgrid_table_id;
        subgrid_table_id = subgrid_id+"_t";
        $("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table>");
        jQuery("#"+subgrid_table_id).jqGrid({
            url:"subgrid.php?q=2&id="+row_id,
            datatype: "xml",
            colNames: ['No','Item','Qty','Unit','Line Total'],
            colModel: [
                {name:"num",index:"num",width:80,key:true},
                {name:"item",index:"item",width:130},
                {name:"qty",index:"qty",width:70,align:"right"},
                {name:"unit",index:"unit",width:70,align:"right"},
                {name:"total",index:"total",width:70,align:"right",sortable:false}
            ],
            subGrid: true,
            caption: "Grid as Subgrid",
            subGridRowExpanded: function(subgrid_id2, row_id2) {
                var subgrid_table_id2;
                subgrid_table_id2 = subgrid_id2+"_t";
                $("#"+subgrid_id2).html("<table id='"+subgrid_table_id2+"' class='scroll'></table>");
                jQuery("#"+subgrid_table_id2).jqGrid({
                    url:"subgrid.php?q=3&id="+row_id2,
                    datatype: "xml",
                    colNames: ['No','Item','Qty','Unit','Line Total'],
                    colModel: [
                        {name:"num",index:"num",width:80,key:true},
                        {name:"item",index:"item",width:130},
                        {name:"qty",index:"qty",width:70,align:"right"},
                        {name:"unit",index:"unit",width:70,align:"right"},
                        {name:"total",index:"total",width:70,align:"right",sortable:false}
                ],
                subGrid: true,
                caption: "Grid as Subgrid",
                subGridRowExpanded: function(subgrid_id3, row_id3) {
                    var subgrid_table_id3;
                    subgrid_table_id3 = subgrid_id3+"_t";
                    $("#"+subgrid_id3).html("<table id='"+subgrid_table_id3+"' class='scroll'></table></div>");
                    jQuery("#"+subgrid_table_id3).jqGrid({
                        url:"subgrid.php?q=4&id="+row_id3,
                        datatype: "xml",
                        colNames: ['No','Item','Qty','Unit','Line Total'],
                        colModel: [
                            {name:"num",index:"num",width:80,key:true},
                            {name:"item",index:"item",width:130},
                            {name:"qty",index:"qty",width:70,align:"right"},
                            {name:"unit",index:"unit",width:70,align:"right"},
                            {name:"total",index:"total",width:70,align:"right",sortable:false}
                    ]
                    });
                }
                });
            }
        });
    }
});

1 个答案:

答案 0 :(得分:4)

我仍然认为页面上显示的* all **子网格中的*数据之间存在一些ID冲突。例如,如果在某些级别上从打开的网格中插入某些级别,那么具有“1”作为rowid的数据在任何子网格中都不应该插入相同的子网格。

要理解:您在所有级别的子网格上使用key:true"num"列。相应的值不仅仅用在网格单元格内部的"num"列中(<td>here</td>内部)。它还将用作网格或子网格(id)行的<tr>属性的值。 HTML不允许页面上的id重复。因此,你插入具有id重复的元素,你可以有一些奇怪的效果,可能在不同的Web浏览器中有所不同。例如,您将尝试选择一行,然后选择另一行。作为行的选择,您还可能遇到更多难题。因此,您应该填写网格,以便 ID在整个页面上是唯一的

要确保id duplicates的问题不存在,您可以使用idPrefix选项。在0级,你可以使用

idPrefix: "m"

(来自main)例如。对于下一级别的子网格,您可以使用

idPrefix: "s" + row_id + "_"

用于下一级子网格

idPrefix: "s" + row_id + "_" + row_id2 + "_"

idPrefix: "s" + row_id + "_" + row_id2 + "_" + row_id3 + "_"

jQuery("#"+subgrid_table_id3)的定义位于所有先前关卡的子网格的subGridRowExpanded内。因此,您可以访问外部范围内定义的row_idrow_id2

我希望,在改变之后你不会有任何奇怪的问题,例如你所描述的问题。

这里是DUPLICATES的样本

3rd grid when you click to show fourth grid