【问题标题】:jqgrid nested subgrid 4th level subgrid always returns first rowid of the subgridjqgrid 嵌套子网格第 4 级子网格始终返回子网格的第一个 rowid
【发布时间】:2012-05-01 16:48:37
【问题描述】:

jqGrid v4.3.2
ie9
win7企业版

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

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

我这样做了,我有

第一级子网格OK
第二级子网格OK
第三级子网格OK
4 级子网格 它为 3rd Lvl sg 的每一行加载 subgrid OK,但它仅显示 3rd Lvl sg 的第一行 id 的数据

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

我尝试从以下事件返回 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。

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

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

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}
                    ]
                    });
                }
                });
            }
        });
    }
});

【问题讨论】:

  • 我想您在主网格的 填充 期间使用了错误的 rowid(如果 id 则重复)。演示“ - > Advanced - > Grid as SubGrid”在第二级没有子实体。所以我无法重现您描述的问题,并且只能在顶层打开子网格。您应该包括测试数据和定义 jqGrid 的 JavaScript 代码。
  • @Oleg 我根据您的要求提供了一个示例。
  • @Oleg,我听从了你的建议,发现我确实有重复的 id,这就是失败的原因。您能否将您的评论发布为答案,以便我将您的答案标记为已接受?

标签: jquery jqgrid nested subgrid


【解决方案1】:

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

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

要确保不存在 id 重复的问题,您可以使用 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

我希望,更改后您不会遇到像您描述的问题那样的奇怪问题。

这里是重复的样本

【讨论】:

  • 你是对的,这是从服务器返回的数据中重复 id 的问题,我更正了查询,现在一切正常。非常感谢您的宝贵时间
  • @JoseR:很高兴听到我可以帮助你。不客气!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多