Overview

The row actions are optional special columns attached to the row header that make it easy to perform operations on the row data using the UI, such as saving, removing and resetting the data.

The new row is a special row at the bottom of a TableSheet that will automatically insert a new row when data is added.

Row Action The row action is enabled by default and is on the row header of the TableSheet. There are some built-in row actions that can be added: Name Description pinRow pin a row dirtyStatus show the data changes in a row warningInfo show warning infomation in a row removeRow remove a row saveRow save the data changes in a row resetRow reset the data changes in a row Adding remove, save, reset actions: New Row The new row is enabled by default and is at the bottom of the table sheet. You can hide or show it with:
<template> <div class="sample-tutorial"> <gc-spread-sheets class="sample-spreadsheets" @workbookInitialized="init"> </gc-spread-sheets> <div id="options-container" class="options-container"> <fieldset> <legend>Row Action</legend> <div class="field-line"> <input type="button" id="change-option" v-bind:value="toggleRowActionTitleRef" @click="toggleRowActions()"> </div> </fieldset> <fieldset> <legend>New Row</legend> <div class="field-line"> <span>visible: </span><input type="checkbox" v-model="newRowVisibleRef" id="show-button" @change="toggleNewRow()" /> </div> </fieldset> </div> </div> </template> <script setup> import GC from "@mescius/spread-sheets"; import { ref } from "vue"; import "@mescius/spread-sheets-tablesheet"; import "@mescius/spread-sheets-vue"; const spreadRef = ref(null); const tablesheetRef = ref(null); const toggleRowActionTitleRef = ref('hide remove/save/reset'); const newRowVisibleRef = ref(true); function init(spread) { initSpread(spread); } function initSpread(spread) { spreadRef.value = spread; spread.suspendPaint(); spread.clearSheets(); spread.options.autoFitType = GC.Spread.Sheets.AutoFitType.cellWithHeader; //init a data manager var dataManager = spread.dataManager(); var myTable = dataManager.addTable("myTable", { data: employees }); //init a table sheet var sheet = spread.addSheetTab(0, "MyTableSheet", GC.Spread.Sheets.SheetType.tableSheet); var rowActions = GC.Spread.Sheets.TableSheet.BuiltInRowActions; let options = sheet.rowActionOptions(); options.push( rowActions.removeRow, rowActions.saveRow, rowActions.resetRow, ); sheet.rowActionOptions(options); tablesheetRef.value = sheet; //bind a view to the table sheet myTable.fetch().then(function () { var view = myTable.addView("myView", [ { value: "Id", width: 50, caption: "ID" }, { value: "FirstName", width: 100, caption: "First Name" }, { value: "LastName", width: 100, caption: "Last Name" }, { value: "HomePhone", width: 150, caption: "Phone" }, { value: "PhotoPath", width: 150, caption: "Attachment" }, { value: "Notes", width: 400, caption: "Comments" }, ]); sheet.setDataView(view); }); spread.resumePaint(); } function toggleNewRow() { tablesheetRef.value.options.allowAddNew = newRowVisibleRef.value; } function toggleRowActions() { let sheet = tablesheetRef.value; let options = sheet.rowActionOptions(); if (options.length === 1) { toggleRowActionTitleRef.value = 'hide remove/save/reset' var rowActions = GC.Spread.Sheets.TableSheet.BuiltInRowActions; options.push( setTooltip(rowActions.removeRow, 'Remove'), setTooltip(rowActions.saveRow, 'Save'), setTooltip(rowActions.resetRow, 'Reset'), ); } else { toggleRowActionTitleRef.value = 'show remove/save/reset' options.splice(1, options.length); } sheet.rowActionOptions(options); } function setTooltip(options, tooltip) { options.tooltip = tooltip; return options; } </script> <style scoped> #app { height: 100%; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } fieldset { padding: 6px; margin: 0; margin-top: 10px; } .sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: calc(100% - 280px); height: 100%; overflow: hidden; float: left; } .options-container { float: right; width: 280px; padding: 12px; height: 100%; box-sizing: border-box; background: #fbfbfb; overflow: auto; } fieldset span, fieldset input, fieldset select { display: inline-block; text-align: left; } fieldset input[type=text] { width: calc(100% - 58px); } fieldset input[type=button] { width: 100%; text-align: center; } fieldset select { width: calc(100% - 50px); } .field-line { margin-top: 4px; } .field-inline { display: inline-block; vertical-align: middle; } fieldset label.field-inline { width: 100px; } fieldset input.field-inline { width: calc(100% - 100px - 12px); } .required { color: red; font-weight: bold; } #fields { display: none; } #fields.show { display: block; } </style>
<!DOCTYPE html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>SpreadJS VUE</title> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/en/vue3/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/en/vue3/node_modules/systemjs/dist/system.src.js"></script> <script src="$DEMOROOT$/spread/source/data/employees.js" type="text/javascript"></script> <script src="./systemjs.config.js"></script> <script src="./compiler.js" type="module"></script> <script> var System = SystemJS; System.import("./src/app.js"); System.import('$DEMOROOT$/en/lib/vue3/license.js'); </script> </head> <body> <div id="app"></div> </body> </html>
(function (global) { SystemJS.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true }, paths: { // paths serve as alias 'npm:': 'node_modules/' }, packageConfigPaths: [ './node_modules/*/package.json', "./node_modules/@mescius/*/package.json", "./node_modules/@babel/*/package.json", "./node_modules/@vue/*/package.json" ], map: { 'vue': "npm:vue/dist/vue.esm-browser.js", 'tiny-emitter': 'npm:tiny-emitter/index.js', 'plugin-babel': 'npm:systemjs-plugin-babel/plugin-babel.js', "systemjs-babel-build": "npm:systemjs-plugin-babel/systemjs-babel-browser.js", '@mescius/spread-sheets': 'npm:@mescius/spread-sheets/index.js', '@mescius/spread-sheets-vue': 'npm:@mescius/spread-sheets-vue/index.js', '@mescius/spread-sheets-tablesheet': 'npm:@mescius/spread-sheets-tablesheet/index.js' }, meta: { '*.css': { loader: 'systemjs-plugin-css' }, '*.vue': { loader: "../plugin-vue/index.js" } } }); })(this);