Spread.Viewsでは、グリッドの上部にヘッダー行を設定できます。ヘッダー行を使用すると、データの並び替え、要約グラフの表示など、さまざまな機能を実行できます。
グリッドにヘッダー行を設定するには、次の手順を実行します。
サンプルコード
- 列ヘッダーにスパークラインを使用できるように、sparkline.min.jsへの参照を追加します。
<script src="[Your Script Path]/gc.spread.views.sparkline.10.0.0.min.js" type="text/JavaScript"></script> <script src="data/airport.js" type="text/javascript"></script>
- 列定義、および列ヘッダー定義を追加します。
var columns = [{ id: 'airport', caption: 'Airport', dataField: 'airport', minWidth: 150, headerRow: { renderer: '<div class="header-input"><input type="text"/></div>' } }, { id: 'date', caption: 'Date', dataField: 'EST', minWidth: 150, headerRow: { renderer: '<div class="header-input"><select><option value="all">All</option><option value="January">January</option><option value="February">February</option><option value="March">March</option></select></div>' } }, { id: 'meanTemperature', caption: 'Mean Temperature', dataField: 'Mean_TemperatureC', minWidth: 150, presenter: '<span>{{=it.meanTemperature}}℃</span>', headerRow: { renderer: '{{=it.eval("=COLUMNSPARKLINE(histogram([meanTemperature], 0))")}}' } }, { id: 'meanHumidity', caption: 'Mean Humidity', dataField: 'Mean_Humidity', minWidth: 150, presenter: '<span>{{=it.meanHumidity}}%</span>', headerRow: { renderer: '{{=it.eval("=COLUMNSPARKLINE(histogram([meanHumidity], 0))")}}' } }, { id: 'precipitationmm', caption: 'Precipitation', dataField: 'Precipitationmm', minWidth: 150, presenter: '<span>{{?isNaN(+it.precipitationmm)}}{{=it.precipitationmm}}{{??}}{{=it.precipitationmm}}mm{{?}}</span>', headerRow: { renderer: '{{=it.eval("=COLUMNSPARKLINE(histogram([precipitationmm], 0))")}}' } }];
- DIVタグのグリッドIDを呼び出し、コードを初期化します。
var dataView = new GC.Spread.Views.DataView(document.getElementById('grid1'), data, columns, new GC.Spread.Views.Plugins.GridLayout({ allowSorting: true, sorting: 'date', headerRow: { visible: true, height: 48 } }));
ヘッダー行内の入力を処理する関数を定義します。
$('.header-input input').on('keydown', function(e) { e.stopImmediatePropagation(); }); $('#grid-headerrow-position').change(function() { var sel = document.getElementById("grid-headerrow-position"); var value = sel.options[sel.selectedIndex].value; dataView.layoutEngine.options.headerRow.position = value; dataView.invalidate(); }); $('#grid1').on('keyup', '.gc-header-row-cell input', function() { setFilter(getFilter()); }).on('change', '.gc-header-row-cell select', function() { setFilter(getFilter()); }); //focus data.view by default document.querySelector('#grid1').focus(); function getFilter() { var filter = ''; var trans = { all: '', January: '2016-1-', February: '2016-2-', March: '2016-3-' }; var val; var column; $('.header-input input').each(function() { val = $(this).val(); column = $(this).closest('.gc-header-row-cell').attr('data-column'); if (val) { filter += (filter ? '&&' : '') + 'search("' + val + '",[' + column + '],1,-1) >0'; } }); $('.header-input select').each(function() { val = $(this).val(); column = $(this).closest('.gc-header-row-cell').attr('data-column'); if (val) { filter += (filter ? '&&' : '') + 'search("' + trans[val] + '",[' + column + '],1,-1) >0'; } }); return filter; } function setFilter(filter) { if (filter !== '') { dataView.data.filter(filter).do(); } else { dataView.data.filter().clear().do(); } }