です。今、私はちょうどdetails
財産以下のように、行のメインデータとともにサブグリッドデータを配置するでしょう:
var myGridData = [
// main grid data
{id: "10", col1: "11", col2: "12", details: [
// data for subgrid for the id=10
{id: "10", c1: "aa", c2: "ab", c3: "ac"},
{id: "20", c1: "ba", c2: "bb", c3: "bc"},
{id: "30", c1: "ca", c2: "cb", c3: "cc"}
]},
{id: "20", col1: "21", col2: "22", details: [
// data for subgrid for the id=20
{id: "10", c1: "xx", c2: "xy", c3: "xz"}
]}
];
式は、データの項目を取得$(this).jqGrid("getLocalRow", rowid)
と$(this).jqGrid("getLocalRow", rowid).details
は、行のサブグリッドデータです。結果として、the demoのような元の例を書き換えることができます。
は、我々が
details
が
var details = "<span class='fa fa-fw fa-plus'></span> " +
"<span class='mylink'>Details</span>";
のような例のために定義される単純なフォーマッタを
formatter: function() {
return details;
}
使用することができます固定テキストDetails
の列を持っていると定義され、クラスmylink
(私はFont Awesomeアイコンを使用しました)
ここでは、 "subgrid"カラムを非表示にして、または-
というアイコンで隠しセルのclick
イベントのシミュレーションによってサブグリッドを開いたり閉じたりできます。次のフルコードを受け取ります
var myGridData = [
// main grid data
{id: "10", col1: "11", col2: "12", details: [
// data for subgrid for the id=10
{id: "10", c1: "aa", c2: "ab", c3: "ac"},
{id: "20", c1: "ba", c2: "bb", c3: "bc"},
{id: "30", c1: "ca", c2: "cb", c3: "cc"}
]},
{id: "20", col1: "21", col2: "22", details: [
// data for subgrid for the id=20
{id: "10", c1: "xx", c2: "xy", c3: "xz"}
]}
],
$grid = $("#list"),
details = "<span class='fa fa-fw fa-plus'></span> " +
"<span class='mylink'>Details</span>";
$grid.jqGrid({
data: myGridData,
colModel: [
{ name: "col1", label: "Column 1" },
{ name: "col2", label: "Column 2" },
{ name: "details", label: "Details",
align: "center", width: 70,
formatter: function() {
return details;
} }
],
cmTemplate: { width: 200 },
iconSet: "fontAwesome",
autoencode: true,
sortname: "col1",
sortorder: "desc",
pager: true,
caption: "Demonstrate how to create subgrid from local data",
beforeSelectRow: function (rowid, e) {
var $self = $(this),
p = $self.jqGrid("getGridParam"),
$td = $(e.target).closest("tr.jqgrow>td"),
cm = $td.length > 0 ? p.colModel[$td[0].cellIndex] : null,
cmName = cm != null ? cm.name : null;
if (cmName === "details") {
// simulate opening the subgrid
$($td.parent()[0].cells[p.iColByName.subgrid]).click();
// inverse +/-
var $plusMinus = $td.find("span.fa");
if ($plusMinus.hasClass("fa-minus")) {
$plusMinus.removeClass("fa-minus").addClass("fa-plus");
} else {
$plusMinus.removeClass("fa-plus").addClass("fa-minus");
}
}
return true;
},
subGrid: true,
subGridRowExpanded: function (subgridDivId, rowid) {
var $subgrid = $("<table id='" + subgridDivId + "_t'></table>"),
$subgridDiv = $("#" + subgridDivId),
subgridData = $(this).jqGrid("getLocalRow", rowid).details;
$subgridDiv.closest(".subgrid-data").prev(".subgrid-cell").remove();
var colspan = $subgridDiv.closest(".subgrid-data").attr("colspan");
$subgridDiv.closest(".subgrid-data").attr("colspan", parseInt(colspan, 10) + 1);
$subgridDiv.append($subgrid);
$subgrid.jqGrid({
idPrefix: rowid + "_",
data: subgridData,
colModel: [
{ name: "c1", label: "Col 1" },
{ name: "c2", label: "Col 2" },
{ name: "c3", label: "Col 3" }
],
iconSet: "fontAwesome",
autowidth: true,
autoencode: true,
sortname: "c1"
});
$subgrid.jqGrid("setGridWidth", $subgridDiv.width() - 1);
}
}).jqGrid("hideCol", "subgrid");
対応するデモはhereです。 「+のdetailes」のクリックした後一つは以下のように表示されます。

あなたはあなたのJavaScriptコードを投稿する必要があります。 [グリッドとしてのサブグリッド](http://www.trirand.com/jqgridwiki/doku.php?id=wiki:subgrid_as_grid)または[レガシーサブグリッド](http://www.trirand.com/jqgridwiki/doku .php?id = wiki:subgrid) 'subGridRowExpanded'コールバックの実装なし?グリッドとしてのサブグリッド( 'subGridRowExpanded')は最大の柔軟性を提供します。どのバージョンのjqGridを使用していますか([free jqGrid](https://github.com/free-jqgrid/jqGrid)、[Guriddo jqGrid JS](http://guriddo.net/?page_id=103334)古いバージョンのjqGridはバージョン4.7以下)?無料のjqGridを使用すると、任意の場所に任意の列を配置できます。 – Oleg
私はこの回答からコードを取ってhttp://stackoverflow.com/a/10178440/6144040そしてそれを理解しようとします。グリッドとしてのサブグリッドと、それは無料のjqGriddの最後のバージョンです。 – Roman
一度に1つの質問をする必要があります。現在の質問は好きです。 subgridに存在するすべてのカスタマイズの可能性についての本を書いてください。 1つの問題についてのみ1つの質問をする必要があります。 stackoverflowの目的は、多くの読者に共通の情報を提供することです。人々はいくつかの単語を検索し、*特定の問題*の答えを見つけることができるはずです。そのスタックオーバーフローのために、質問を書くためのいくつかのルールがあります。ルールからの1つ:交換可能な質問はありません。別のルール:現在の試行/コードを投稿し、誰かにあなたの仕事の100%を依頼するだけではありません。 – Oleg