如何仅在某些行上显示 jqGrid 子网格?
How to show jqGrid subgrid on certain rows only?
我使用 jqGrid and with a little help from this answer 创建了一个具有多个子网格级别的网格。这是我目前拥有的:
我正在尝试修改它以仅在有数据要显示时才显示子网格。也就是说如果count > 0
。从逻辑上讲,我尝试添加一个条件(下面的伪代码,基于前面提到的答案):
原码
var gridParams = {
datatype: 'local',
data: myGridData,
colNames: ['Column 1', 'Column 2'],
colModel: [
{ name: 'col1', width: 200 },
{ name: 'col2', width: 200 }
],
...
subGrid: true,
subGridRowExpanded: function (subgridDivId, rowId) {
var subgridTableId = subgridDivId + "_t";
$("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>");
$("#" + subgridTableId).jqGrid({
datatype: 'local',
data: mySubgrids[rowId],
colNames: ['Col 1', 'Col 2', 'Col 3'],
colModel: [
{ name: 'c1', width: 100 },
{ name: 'c2', width: 100 },
{ name: 'c3', width: 100 }
],
...
});
}
}
$("#grid").jqGrid(gridParams);
调整后的代码
var gridParams = {
datatype: 'local',
data: myGridData,
colNames: ['Column 1', 'Column 2'],
colModel: [
{ name: 'col1', width: 200 },
{ name: 'col2', width: 200 }
],
...
}
// Condition added HERE
if (count > 0)
{
gridParams.subGrid = true;
gridParams.subGridRowExpanded = function (subgridDivId, rowId) {
var subgridTableId = subgridDivId + "_t";
$("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>");
$("#" + subgridTableId).jqGrid({
datatype: 'local',
data: mySubgrids[rowId],
colNames: ['Col 1', 'Col 2', 'Col 3'],
colModel: [
{ name: 'c1', width: 100 },
{ name: 'c2', width: 100 },
{ name: 'c3', width: 100 }
],
...
});
}
}
$("#grid").jqGrid(gridParams);
但这惨遭失败:
这是根本不受支持还是我做错了什么?
如果我正确理解了你的问题,那么你想要删除子网格中没有元素的行的“+”(扩展子网格)图标。在这种情况下,您可以使用 the old answer 中描述的老技巧。您可以添加 loadComplete
句柄,从具有 subGrid: true
选项的网格中删除一些“+”图标。您只需要知道没有子网格的所有行的 rowids 并为 rows
$("#" + rowid + ">td.sgcollapsed").unbind("click").html("");
已更新:我发布了 free jqGrid 的修改,它允许在没有上述 hack 的情况下轻松实现要求。
The demo 演示新功能。实施起来非常容易。它包含 subGridOptions
内部的 hasSubgrid
回调。回调有 options
,它是具有属性 rowid
、data
和两个不太重要的属性 iRow
和 iCol
的对象。演示代码使用 options.data
表示行的数据。只有当输入行的 tax
高于 20.
时,该演示才会创建子网格
subGridOptions: {
hasSubgrid: function (options) {
return parseFloat(options.data.tax) > 20;
}
}
如果我正确理解你输入数据的格式,你可以在你的情况下使用 mySubgrids[options.data.rowid].length
。
我使用 jqGrid and with a little help from this answer 创建了一个具有多个子网格级别的网格。这是我目前拥有的:
我正在尝试修改它以仅在有数据要显示时才显示子网格。也就是说如果count > 0
。从逻辑上讲,我尝试添加一个条件(下面的伪代码,基于前面提到的答案):
原码
var gridParams = {
datatype: 'local',
data: myGridData,
colNames: ['Column 1', 'Column 2'],
colModel: [
{ name: 'col1', width: 200 },
{ name: 'col2', width: 200 }
],
...
subGrid: true,
subGridRowExpanded: function (subgridDivId, rowId) {
var subgridTableId = subgridDivId + "_t";
$("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>");
$("#" + subgridTableId).jqGrid({
datatype: 'local',
data: mySubgrids[rowId],
colNames: ['Col 1', 'Col 2', 'Col 3'],
colModel: [
{ name: 'c1', width: 100 },
{ name: 'c2', width: 100 },
{ name: 'c3', width: 100 }
],
...
});
}
}
$("#grid").jqGrid(gridParams);
调整后的代码
var gridParams = {
datatype: 'local',
data: myGridData,
colNames: ['Column 1', 'Column 2'],
colModel: [
{ name: 'col1', width: 200 },
{ name: 'col2', width: 200 }
],
...
}
// Condition added HERE
if (count > 0)
{
gridParams.subGrid = true;
gridParams.subGridRowExpanded = function (subgridDivId, rowId) {
var subgridTableId = subgridDivId + "_t";
$("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>");
$("#" + subgridTableId).jqGrid({
datatype: 'local',
data: mySubgrids[rowId],
colNames: ['Col 1', 'Col 2', 'Col 3'],
colModel: [
{ name: 'c1', width: 100 },
{ name: 'c2', width: 100 },
{ name: 'c3', width: 100 }
],
...
});
}
}
$("#grid").jqGrid(gridParams);
但这惨遭失败:
这是根本不受支持还是我做错了什么?
如果我正确理解了你的问题,那么你想要删除子网格中没有元素的行的“+”(扩展子网格)图标。在这种情况下,您可以使用 the old answer 中描述的老技巧。您可以添加 loadComplete
句柄,从具有 subGrid: true
选项的网格中删除一些“+”图标。您只需要知道没有子网格的所有行的 rowids 并为 rows
$("#" + rowid + ">td.sgcollapsed").unbind("click").html("");
已更新:我发布了 free jqGrid 的修改,它允许在没有上述 hack 的情况下轻松实现要求。
The demo 演示新功能。实施起来非常容易。它包含 subGridOptions
内部的 hasSubgrid
回调。回调有 options
,它是具有属性 rowid
、data
和两个不太重要的属性 iRow
和 iCol
的对象。演示代码使用 options.data
表示行的数据。只有当输入行的 tax
高于 20.
subGridOptions: {
hasSubgrid: function (options) {
return parseFloat(options.data.tax) > 20;
}
}
如果我正确理解你输入数据的格式,你可以在你的情况下使用 mySubgrids[options.data.rowid].length
。