jQuery EasyUI データグリッド -サブグリッドの作成

データグリッド(datagrid)の詳細ビューを使用すると、ユーザーは行を展開して追加の詳細情報を表示できます。 任意のコンテンツを行の詳細として読み込むことができ、サブグリッドも動的に読み込むことができます。 このチュートリアルでは、メイングリッド上にサブグリッドを作成する方法を説明します。

ステップ 1:メイングリッドを作成する

<table id="dg" style="width:700px;height:250px"
        url="datagrid22_getdata.php" 
        title="DataGrid - SubGrid"
        singleSelect="true" fitColumns="true">
    <thead>
        <tr>
            <th field="itemid" width="80">Item ID</th>
            <th field="productid" width="100">Product ID</th>
            <th field="listprice" align="right" width="80">List Price</th>
            <th field="unitcost" align="right" width="80">Unit Cost</th>
            <th field="attr1" width="220">Attribute</th>
            <th field="status" width="60" align="center">Status</th>
        </tr>
    </thead>
</table>

ステップ 2:サブグリッドを表示するための詳細ビューを設定する

詳細ビューを使用するには、ページのヘッダーでビュースクリプトファイルを参照することを忘れないでください。

<script type="text/javascript" src="http://www.w3cschool.cc/try/jeasyui/datagrid-detailview.js"></script>
$('#dg').datagrid({
    view: detailview,
    detailFormatter:function(index,row){
        return '<div style="padding:2px"><table class="ddv"></table></div>';
    },
    onExpandRow: function(index,row){
        var ddv = $(this).datagrid('getRowDetail',index).find('table.ddv');
        ddv.datagrid({
            url:'datagrid22_getdetail.php?itemid='+row.itemid,
            fitColumns:true,
            singleSelect:true,
            rownumbers:true,
            loadMsg:'',
            height:'auto',
            columns:[[
                {field:'orderid',title:'Order ID',width:100},
                {field:'quantity',title:'Quantity',width:100},
                {field:'unitprice',title:'Unit Price',width:100}
            ]],
            onResize:function(){
                $('#dg').datagrid('fixDetailRowHeight',index);
            },
            onLoadSuccess:function(){
                setTimeout(function(){
                    $('#dg').datagrid('fixDetailRowHeight',index);
                },0);
            }
        });
        $('#dg').datagrid('fixDetailRowHeight',index);
    }
});

ユーザーが展開ボタン('+')をクリックすると、'onExpandRow' イベントがトリガーされます。 3つの列を持つ新しいサブグリッドを作成します。 サブグリッドのデータが正常に読み込まれたとき、またはサイズが変更されたときは、メイングリッドで 'fixDetailRowHeight' メソッドを呼び出すことを忘れないでください。

ステップ 3:サーバーサイドコード

datagrid22_getdata.php
$result = array();

include 'conn.php';

$rs = mysql_query("select * from item where itemid in (select itemid from lineitem)");

$items = array();
while($row = mysql_fetch_object($rs)){
    array_push($items, $row);
}

echo json_encode($items);
datagrid22_getdetail.php
include 'conn.php';

$itemid = mysql_real_escape_string($_REQUEST['itemid']);

$rs = mysql_query("select * from lineitem where itemid='$itemid'");
$items = array();
while($row = mysql_fetch_object($rs)){
    array_push($items, $row);
}
echo json_encode($items);

jQuery EasyUI サンプルをダウンロード

jeasyui-datagrid-datagrid22.zip

その他の拡張