Column Header Fit Mode

Some layouts may require thin column widths but contain longer column header data that must fully be displayed in the view.

SpreadJS has several different modes to support this scenario - normal mode, vertical mode, and stacked mode.

Description
app.js
index.html
styles.css
Copy to CodeMine

Tablesheet supports three type to adjust the column header fit mode:

  1. normal(default)
  2. vertical
  3. stack

Users can set the column header fit mode for the specified column in a tablesheet view in order to display the header and viewport data in a suitable manner.

interface IColumn {
    name: string; // the unique name of the column
    value?: string; // the value of the column, could be a field name of table from database, or formula which uses the fields names.
    caption?: string; // the caption of the column, which is the key of row data
    width?: number; // the width of the column, support number in pixel, or star size
    style?: GC.Data.StyleOptions; // the whole column style
    conditionalFormats?: Array<GC.Data.CellValueRuleOptions | GC.Data.SpecificTextRuleOptions | GC.Data.FormulaRuleOptions | GC.Data.DateOccurringRuleOptions | GC.Data.    Top10RuleOptions | GC.Data.UniqueRuleOptions | GC.Data.DuplicateRuleOptions | GC.Data.AverageRuleOptions | GC.Data.TwoScaleRuleOptions | GC.Data.ThreeScaleRuleOptions | GC.Data.DataBarRuleOptions | GC.Data.IconSetRuleOptions>;
    validator?: GC.Data.NumberValidatorOptions | GC.Data.DateValidatorOptions | GC.Data.TimeValidatorOptions | GC.Data.TextLengthValidatorOptions | GC.Data.FormulaValidatorOptions | GC.Data.FormulaListValidatorOptions | GC.Data.ListValidatorOptions;
    isPrimaryKey?: boolean; // mark the column as primary key column
    readonly?: boolean; // mark the column is readonly
    required?: boolean; // mark the column is required when insert a new row
    defaultValue?: any; // provide the default value when insert a new row, could be a const or a formula
    headerStyle?: GC.Data.HeaderStyleOptions; // the column header style.
    headerFit?: "normal" | "vertical" | "stack" // the column header fit mode, default is normal
}

This is the sample code.

//add table
dataManager.addTable("myTable", {
    remote: {
        read: {
            url: "https://demodata.mescius.io/northwind/api/v1/Orders"
        }
    }
});
//add custom view
var myView = orderTable.addView("myView", [
    {value: 'orderId',caption: "OrderId", width: 45, headerFit: "stack"},
    {value: 'customerId', caption: "CustomerName", width: 50,  headerFit: "stack"},
    {value: 'employeeId', caption: "EmployeeId", width: 16, headerFit: "stack"},
    {value: 'orderDate', caption: "orderDate", width: 136, },
    {value: 'requiredDate', caption: "requiredDate", width: 136, headerFit: "vertical"},
    {value: 'shippedDate', caption: "ShippedDate", width: 136, headerFit: "normal"},
    {value: 'shipVia', caption: "ShipVia", width: 16, headerFit: "stack"},
    {value: 'freight', caption: "Freight", width: 45, headerFit: "stack"},
    {value: 'shipName', caption: "ShipName", width: 100, headerFit: "normal"}
]);
// Set custom view into tableSheet.
tableSheet.setDataView(myView);
Tablesheet supports three type to adjust the column header fit mode: normal(default) vertical stack Users can set the column header fit mode for the specified column in a tablesheet view in order to display the header and viewport data in a suitable manner. This is the sample code.
/*REPLACE_MARKER*/ /*DO NOT DELETE THESE COMMENTS*/ window.onload = function() { var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 0 }); initSpread(spread); }; function initSpread(spread) { spread.suspendPaint(); spread.options.autoFitType = GC.Spread.Sheets.AutoFitType.cellWithHeader; //init a data manager var baseApiUrl = getBaseApiUrl(); var dataManager = spread.dataManager(); //add product table var productTable = dataManager.addTable("productTable", { remote: { read: { url: baseApiUrl + "/Product" } } }); //init a table sheet var sheet = spread.addSheetTab(0, "TableSheet1", GC.Spread.Sheets.SheetType.tableSheet); sheet.options.allowAddNew = false; //hide new row //bind a view to the table sheet var myView = productTable.addView("myView", [ { value: "Id", caption: "ID", width: 46, headerFit: "vertical" }, { value: "ProductName", caption: "Name", width: 220 }, { value: "QuantityPerUnit", caption: "Quantity Per Unit", width: 140, headerFit: "stack" }, { value: "UnitPrice", caption: "Unit Price", width: 45, headerFit: "stack", headerStyle: { backColor : "#F7A711", foreColor:"white", borderLeft: { color: "#367fc9", style: "thin" }, borderTop: { color: "#367fc9", style: "thick" }, borderRight: { color: "#367fc9", style: "thin" }, borderBottom: { color: "#367fc9", style: "thin" } }}, { value: "UnitsInStock", caption: "Units In Stock", width: 40, headerFit: "stack" }, { value: "UnitsOnOrder", caption: "Units On Order", width: 40, headerFit: "stack", headerStyle: { backColor : "#F7A711"}}, { value: "ReorderLevel", caption: "Reorder Level", width: 140, headerStyle: { borderLeft: { color: "black", style: "thin" }, borderTop: { color: "black", style: "thin" }, borderRight: { color: "black", style: "thin" }, borderBottom: { color: "black", style: "thin" }, } }, { value: "Discontinued", headerFit: "vertical", width: 70} ]); myView.fetch().then(function() { sheet.setDataView(myView); }); spread.resumePaint(); } function getBaseApiUrl() { return window.location.href.match(/http.+spreadjs\/demos\//)[0] + 'server/api'; }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <!-- Promise Polyfill for IE, https://www.npmjs.com/package/promise-polyfill --> <script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"></script> <script src="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-tablesheet/dist/gc.spread.sheets.tablesheet.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div id="ss" class="sample-spreadsheets"></div> <div id="optionContainer" class="optionContainer"> </div> </div> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } .sample-spreadsheets { width: 100%; height: 100%; overflow: hidden; float: left; }