OutlineMode

This sample demonstrates the PivotGrid's new outlineMode property. In outline mode, the PivotGrid renders row fields in an outline format that is more compact and reduces the amount of white space shown on the screen. Outline mode is recommended for views with a large number of row fields.

Learn about OLAP | PivotGrid API Reference

import 'bootstrap.css'; import '@mescius/wijmo.styles/wijmo.css'; import './styles.css'; import '@mescius/wijmo.touch'; // support drag/drop on touch devices import { PivotEngine, PivotPanel, PivotGrid } from '@mescius/wijmo.olap'; import { CellRange } from '@mescius/wijmo.grid'; import { toggleClass, saveFile } from '@mescius/wijmo'; import { getData } from './data'; document.readyState === 'complete' ? init() : window.onload = init; function init() { // create the olap components let theEngine = new PivotEngine({ itemsSource: getData(1000), showRowTotals: 'Subtotals', showColumnTotals: 'None', totalsBeforeData: true, rowFields: ['Country', 'Product', 'Color'], valueFields: ['Sales', 'Expenses', 'Downloads'] }); let thePanel = new PivotPanel('#thePanel', { engine: theEngine, }); let theGrid = new PivotGrid('#theGrid', { itemsSource: theEngine, outlineMode: true }); // customize the olap components document.getElementById('outline').addEventListener('click', e => { theGrid.outlineMode = e.target.checked; if (theGrid.outlineMode) { let before = document.getElementById('before'); theEngine.totalsBeforeData = before.checked = true; } else { let before = document.getElementById('style'); before.checked = false; toggleClass(theGrid.hostElement, 'outline', false); } }); document.getElementById('style').addEventListener('click', e => { let customStyle = e.target.checked; toggleClass(theGrid.hostElement, 'outline', customStyle); }); document.getElementById('before').addEventListener('click', e => { theEngine.totalsBeforeData = e.target.checked; }); document.getElementById('headers').addEventListener('click', e => { theGrid.showRowFieldHeaders = e.target.checked; }); // export to CSV document.getElementById('csv').addEventListener('click', e => { let rng = new CellRange(0, 0, theGrid.rows.length - 1, theGrid.columns.length - 1), csv = theGrid.getClipString(rng, true, true, true); saveFile(csv, 'FlexGrid.csv'); }); }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>MESCIUS Wijmo OLAP Pivot Grid OutlineMode</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- SystemJS --> <script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.21.5/system.src.js" integrity="sha512-skZbMyvYdNoZfLmiGn5ii6KmklM82rYX2uWctBhzaXPxJgiv4XBwJnFGr5k8s+6tE1pcR1nuTKghozJHyzMcoA==" crossorigin="anonymous"></script> <script src="systemjs.config.js"></script> <script> System.import('./src/app'); </script> </head> <body> <div class="container-fluid"> <label> outlineMode <input id="outline" type="checkbox" checked> </label><br /> <label> custom style <input id="style" type="checkbox" checked> </label><br /> <label> totalsBeforeData <input id="before" type="checkbox" checked> </label><br /> <label> showRowFieldHeaders <input id="headers" type="checkbox" checked> </label><br /> <div class="row"> <div class="col-sm-5"> <div id="thePanel"></div> </div> <div class="col-sm-7"> <div id="theGrid" class="outline"></div> <button id="csv" class="btn btn-primary">Export to CSV</button> </div> </div> </div> </body> </html>
// // get the raw data export function getData(count) { let countries = ['Germany', 'Italy', 'Japan', 'UK', 'US'], products = ['Widgets', 'Gadgets', 'Doohickeys'], colors = ['Red', 'Green', 'Blue', 'Yellow', 'Purple', 'White', 'Black', 'Magenta'], data = []; // for (let i = 0; i < count; i++) { let trend = (i % countries.length + 1) * (i % products.length + 1); data.push({ country: randomItem(countries), product: randomItem(products), color: randomItem(colors), active: i % 5 == 0, due: new Date(), sales: Math.random() * 10000 * trend, expenses: Math.random() * 5000 * trend, downloads: Math.random() * 100000 * trend }); } // return data; } // // get a random item from an array function randomItem(arr) { return arr[Math.floor(Math.random() * arr.length)]; }
.wj-pivotgrid { max-height: 400px; box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); } .outline.wj-pivotgrid .wj-cell:not(.wj-state-selected) { border-right: none; border-bottom: none; background: #fff; color: #000; } body { margin-bottom: 24pt; }
(function (global) { System.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true }, meta: { '*.css': { loader: 'css' } }, paths: { // paths serve as alias 'npm:': 'node_modules/' }, // map tells the System loader where to look for things map: { 'jszip': 'npm:jszip/dist/jszip.js', '@mescius/wijmo': 'npm:@mescius/wijmo/index.js', '@mescius/wijmo.input': 'npm:@mescius/wijmo.input/index.js', '@mescius/wijmo.styles': 'npm:@mescius/wijmo.styles', '@mescius/wijmo.cultures': 'npm:@mescius/wijmo.cultures', '@mescius/wijmo.chart': 'npm:@mescius/wijmo.chart/index.js', '@mescius/wijmo.chart.analytics': 'npm:@mescius/wijmo.chart.analytics/index.js', '@mescius/wijmo.chart.animation': 'npm:@mescius/wijmo.chart.animation/index.js', '@mescius/wijmo.chart.annotation': 'npm:@mescius/wijmo.chart.annotation/index.js', '@mescius/wijmo.chart.finance': 'npm:@mescius/wijmo.chart.finance/index.js', '@mescius/wijmo.chart.finance.analytics': 'npm:@mescius/wijmo.chart.finance.analytics/index.js', '@mescius/wijmo.chart.hierarchical': 'npm:@mescius/wijmo.chart.hierarchical/index.js', '@mescius/wijmo.chart.interaction': 'npm:@mescius/wijmo.chart.interaction/index.js', '@mescius/wijmo.chart.radar': 'npm:@mescius/wijmo.chart.radar/index.js', '@mescius/wijmo.chart.render': 'npm:@mescius/wijmo.chart.render/index.js', '@mescius/wijmo.chart.webgl': 'npm:@mescius/wijmo.chart.webgl/index.js', '@mescius/wijmo.chart.map': 'npm:@mescius/wijmo.chart.map/index.js', '@mescius/wijmo.gauge': 'npm:@mescius/wijmo.gauge/index.js', '@mescius/wijmo.grid': 'npm:@mescius/wijmo.grid/index.js', '@mescius/wijmo.grid.detail': 'npm:@mescius/wijmo.grid.detail/index.js', '@mescius/wijmo.grid.filter': 'npm:@mescius/wijmo.grid.filter/index.js', '@mescius/wijmo.grid.search': 'npm:@mescius/wijmo.grid.search/index.js', '@mescius/wijmo.grid.grouppanel': 'npm:@mescius/wijmo.grid.grouppanel/index.js', '@mescius/wijmo.grid.multirow': 'npm:@mescius/wijmo.grid.multirow/index.js', '@mescius/wijmo.grid.transposed': 'npm:@mescius/wijmo.grid.transposed/index.js', '@mescius/wijmo.grid.transposedmultirow': 'npm:@mescius/wijmo.grid.transposedmultirow/index.js', '@mescius/wijmo.grid.pdf': 'npm:@mescius/wijmo.grid.pdf/index.js', '@mescius/wijmo.grid.sheet': 'npm:@mescius/wijmo.grid.sheet/index.js', '@mescius/wijmo.grid.xlsx': 'npm:@mescius/wijmo.grid.xlsx/index.js', '@mescius/wijmo.grid.selector': 'npm:@mescius/wijmo.grid.selector/index.js', '@mescius/wijmo.grid.cellmaker': 'npm:@mescius/wijmo.grid.cellmaker/index.js', '@mescius/wijmo.nav': 'npm:@mescius/wijmo.nav/index.js', '@mescius/wijmo.odata': 'npm:@mescius/wijmo.odata/index.js', '@mescius/wijmo.olap': 'npm:@mescius/wijmo.olap/index.js', '@mescius/wijmo.rest': 'npm:@mescius/wijmo.rest/index.js', '@mescius/wijmo.pdf': 'npm:@mescius/wijmo.pdf/index.js', '@mescius/wijmo.pdf.security': 'npm:@mescius/wijmo.pdf.security/index.js', '@mescius/wijmo.viewer': 'npm:@mescius/wijmo.viewer/index.js', '@mescius/wijmo.xlsx': 'npm:@mescius/wijmo.xlsx/index.js', '@mescius/wijmo.undo': 'npm:@mescius/wijmo.undo/index.js', '@mescius/wijmo.interop.grid': 'npm:@mescius/wijmo.interop.grid/index.js', '@mescius/wijmo.touch': 'npm:@mescius/wijmo.touch/index.js', '@mescius/wijmo.cloud': 'npm:@mescius/wijmo.cloud/index.js', '@mescius/wijmo.barcode': 'npm:@mescius/wijmo.barcode/index.js', '@mescius/wijmo.barcode.common': 'npm:@mescius/wijmo.barcode.common/index.js', '@mescius/wijmo.barcode.composite': 'npm:@mescius/wijmo.barcode.composite/index.js', '@mescius/wijmo.barcode.specialized': 'npm:@mescius/wijmo.barcode.specialized/index.js', 'jszip': 'npm:jszip/dist/jszip.js', 'bootstrap.css': 'npm:bootstrap/dist/css/bootstrap.min.css', 'css': 'npm:systemjs-plugin-css/css.js', 'plugin-babel': 'npm:systemjs-plugin-babel/plugin-babel.js', 'systemjs-babel-build':'npm:systemjs-plugin-babel/systemjs-babel-browser.js' }, // packages tells the System loader how to load when no filename and/or no extension packages: { src: { defaultExtension: 'js' }, "node_modules": { defaultExtension: 'js' }, } }); })(this);