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}
]
});
}
});
}
});
}
});
答案 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_id
和row_id2
。
我希望,在改变之后你不会有任何奇怪的问题,例如你所描述的问题。
这里是DUPLICATES的样本