Gridの展開した行の中に別のGridを表示【W2UI.js】

 w2ui.jsというライブラリでGridの展開した行の中に別のGridを表示する方法の忘備録です。

Gridオブジェクトは以下の様な表です。

 


1. レコード展開アイコンを表示

 
 GridのshowオプションでexpandColumnをtrueにすると表に新たな列が追加されます。
 

 

 この新たに追加された列の”+”マークをクリックすると、クリックした行の直下に1行追加されます。

 


 

2. 内側に生成予定のGridを囲むコンテナを生成

 idが#grid_${オブジェクト名}_rec_${クリックしたマークの行}_expandedのdiv要素の内側に生成予定のGridを囲むコンテナを生成します。
 #grid_${オブジェクト名}_rec_${クリックしたマークの行}_expandedは、onExpandに値として設定した関数に渡される引数 (event) からevent.box_idという形でも参照することができます。onExpandに設定した関数は”+”マークをクリックしたときに呼ばれます。

 

 

 

 

3. 2で作ったdivコンテナの中にGridオブジェクトを生成

 HTMLとしては存在しますが、このままだと表示されません。

 

4. 3で作った内側のGridが表示されるよう調整

 そこで表がきちんと表示されるようアニメーション完了後にstyle属性を調整することで操作します。

 

 2で作ったdiv要素の子のdiv (#${containerId} > div) はデフォルトでは「position:absolute;」になっています。
absoluteだと表が見えないので、relativeに変更します。
 またheight:0; にもなっているので、表示する分の行が収まるよう高さを指定します。
 #grid_inner_grid${event.recid}_bodyの高さはデフォルトでは0になっています。
表の位置と高さを調整しますが、w2uiのcssで!importantな高さの指定があるので、こちらに!importantを付けます。
 内側の表の行数が多いとrecordsの一部しか表示されない場合がありますが、scrollイベントを↓の要素で発火させると全部の内訳が表示されます。
外側のGridから溢れる多さの件数の行を表示をするとき、スクロールできなくなることがあります。
‘#grid_grid_records’のoverflowはデフォルトではhiddenかhidden autoですが、
overflow-yを常にautoとすることで、スクロールできるようにします。
これで以下のようにGridオブジェクトの内側に別のGridを表示することができます。

 

ただし、65行目の+26というのは、ヘッダー分の高さを加えてあるところです。

 

 

5. 行番号も広げる

 また以下のコードの様にqueueにfalseを設定することで行番号のアニメーションと行の高さが内側のGridの部分と連動するようになります。

 

 


これでGridの展開した行の中に別のGridを表示することができました。

ライブラリの生成したHTMLにかなり変更を加えて表示していて無理やり感があります。

なので使うw2uiのバージョンが変わらないことをどこかで保証しておかないと表示が崩れる可能性があります。

(例えばwebサーバにw2ui.js本体を置いといて参照するなど)

 

 

 



❏❏ TOPIC ❏❏ ------------------------------------------------------------

カスタム自由!フリーECサイトパッケージ
チャットボット導入サービス
WEBシステム開発・スマホアプリ開発はSRIAへ