前回の投稿で行列の固定方法について記載しましたが、
今回の記事は列ヘッダの行を増やす方法についてです。
きっかけは、行列の固定ではソートによって固定した行が移動してしまったからです。
固定とは言え、データの並び替えが効いてしまうようです。それなら
そもそも列ヘッダに埋め込んでしまえばいい。という発想です。
▼前回の行列固定方法はコチラ▼
前提
実装の流れ
1. 列ヘッダの配列を取得する
var theGrid = new wijmo.grid.FlexGrid('#theGrid', {
columns: COLUMN_DEFINE,
});
let columnHeaders = theGrid.columnHeaders.rows;
columnsの定義は端折っていますが、FlexGridを生成してから列ヘッダの情報を取得しています。columnHeaders.rows
header
って言ったりrow
って言ったりで混乱するかもしれませんが、
列ヘッダも一応「行」なので、rows
で全行取得することができます。
2. 空行を生成して列ヘッダの配列に挿入する
let columnHeaders = theGrid.columnHeaders.rows;
let blankRow = new wijmo.grid.Row();
columnHeaders.splice(0, 0, blankRow);
上記ソースコードを実行すると、columns
に設定した列ヘッダの上に空行が挿入されます。
今回は初期設定される列ヘッダの文字表記を1段目に、2段目にカスタムの見出しを設定してみます。
3. 列ヘッダの文言を設定し直す
let newHeaders = [
theGrid.columns.map(x => x.header),
['col1', 'col2', col3', ...],
];
theGrid.formatItem.addHandler(function(s, e) {
if (e.panel.cellType === wijmo.grid.CellType.ColumnHeader) {
e.cell.textContent = header[e.row][e.col];
}
})
newHeaders
に既存のヘッダとカスタム見出しを定義しておいて、formatItem
に書き換えを任せてます。
ここで注意が必要なのは、↑のコードでは e.cell.textContent
を使用していますが、innerHTML
でも書き換えは可能です。しかし、フィルターを使っているグリッドではinnerHTML
によってフィルターのアイコンが消えてしまう問題が起こり得えます。安全の為、textContent
を使用するようにしましょう。
サンプル
上記の説明を通して実装すれば動くようになります。
サンプルは↓を参照してください。
お疲れさまでした!