Drag Header To Move Rows or Columns

With SpreadJS you can move rows or columns by dragging row or column headers.

Description
app.component.ts
index.html
app.component.html
styles.css
Copy to CodeMine

SpreadJS allows you to move rows or columns by drag row or column headers.

First select the row or column headers, then drag the selected row or column headers to move the rows or columns:

Users can specifies how to allow drag header to move through the following API:

    spread.options.allowDragHeaderToMove = GC.Spread.Sheets.AllowDragHeaderToMove.both;

The available options in GC.Spread.Sheets.AllowDragHeaderToMove:

  • none: Specifies that no drag header to move allowed.
  • column: Specifies that only the column header allow to move.
  • row: Specifies that only the row header allow to move.
  • both: Specifies that both column and row header allow to move.
SpreadJS allows you to move rows or columns by drag row or column headers. First select the row or column headers, then drag the selected row or column headers to move the rows or columns: Users can specifies how to allow drag header to move through the following API: The available options in GC.Spread.Sheets.AllowDragHeaderToMove: none: Specifies that no drag header to move allowed. column: Specifies that only the column header allow to move. row: Specifies that only the row header allow to move. both: Specifies that both column and row header allow to move.
import { Component, NgModule, enableProdMode } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { FormsModule } from '@angular/forms'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { SpreadSheetsModule } from '@mescius/spread-sheets-angular'; import GC from '@mescius/spread-sheets'; import './styles.css'; @Component({ selector: 'app-component', templateUrl: 'src/app.component.html' }) export class AppComponent { spread: GC.Spread.Sheets.Workbook; allowDragHederToMoveOptions: any; allowDragHeaderToMove: number; hostStyle = { width: 'calc(100% - 280px)', height: '100%', overflow: 'hidden', float: 'left' }; constructor() { this.allowDragHederToMoveOptions = [{ value: 0, text: "None" }, { value: 1, text: "Column" }, { value: 2, text: "Row" }, { value: 3, text: "Both" }]; this.allowDragHeaderToMove = 0; } async initSpread($event: any) { const loadingTip = addLoadingTip() const spread = this.spread = $event.spread; const res = await fetch('$DEMOROOT$/en/sample/features/worksheet/drag-header-to-move/spread.json'); await spread.fromJSON(await res.json()); spread.options.allowDragHeaderToMove = GC.Spread.Sheets.AllowDragHeaderToMove.none; loadingTip.remove(); } allowDragHeaderToMoveChange() { const spread = this.spread; spread.options.allowDragHeaderToMove = this.allowDragHeaderToMove; } } function addLoadingTip() { const div = document.createElement('div'); div.style.position = 'absolute'; div.style.inset = '0'; div.style.display = 'flex'; div.style.alignItems = 'center'; div.style.justifyContent = 'center'; div.style.background = 'white'; div.style.zIndex = '100'; div.textContent = 'Loading data from server ...'; document.body.appendChild(div); return div; } @NgModule({ imports: [BrowserModule, SpreadSheetsModule, FormsModule], declarations: [AppComponent], exports: [AppComponent], bootstrap: [AppComponent] }) export class AppModule {} enableProdMode(); // Bootstrap application with hash style navigation and global services. platformBrowserDynamic().bootstrapModule(AppModule);
<!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/angular/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <!-- Polyfills --> <script src="$DEMOROOT$/en/angular/node_modules/core-js/client/shim.min.js"></script> <script src="$DEMOROOT$/en/angular/node_modules/zone.js/fesm2015/zone.min.js"></script> <!-- SystemJS --> <script src="$DEMOROOT$/en/angular/node_modules/systemjs/dist/system.js"></script> <script src="systemjs.config.js"></script> <script> // workaround to load 'rxjs/operators' from the rxjs bundle System.import('rxjs').then(function (m) { System.import('@angular/compiler'); System.set(SystemJS.resolveSync('rxjs/operators'), System.newModule(m.operators)); System.import('$DEMOROOT$/en/lib/angular/license.ts'); System.import('./src/app.component'); }); </script> </head> <body> <app-component></app-component> </body> </html>
<div class="sample-tutorial"> <gc-spread-sheets [hostStyle]="hostStyle" (workbookInitialized)="initSpread($event)"> <gc-worksheet> </gc-worksheet> </gc-spread-sheets> <div class="options-container"> <div class="option-row"> <p>First select the row or column headers, then drag the selected row or column headers to move the rows or columns.</p> </div> <hr> <div class="option-row"> <label>Set the options below to specify how to allow drag header to move.</label> </div> <div class="option-row"> <label for="allowDragHeaderToMove">Drag header to move:</label> <select name="allowDragHeaderToMove" id="allowDragHeaderToMove" [(ngModel)]="allowDragHeaderToMove" (change)="allowDragHeaderToMoveChange()"> <option *ngFor="let item of allowDragHederToMoveOptions" [value]="item.value|number">{{item.text}}</option> </select> </div> </div> </div>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } .options-container { float: right; width: 280px; padding: 12px; height: 100%; box-sizing: border-box; background: #fbfbfb; overflow: auto; } .option-row { font-size: 14px; padding: 5px; margin-top: 10px; } label { display: inline-block; margin-bottom: 6px; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }
(function (global) { System.config({ transpiler: 'ts', typescriptOptions: { tsconfig: true }, meta: { 'typescript': { "exports": "ts" }, '*.css': { loader: 'css' } }, paths: { // paths serve as alias 'npm:': 'node_modules/' }, // map tells the System loader where to look for things map: { 'core-js': 'npm:core-js/client/shim.min.js', 'zone': 'npm:zone.js/fesm2015/zone.min.js', 'rxjs': 'npm:rxjs/dist/bundles/rxjs.umd.min.js', '@angular/core': 'npm:@angular/core/fesm2022', '@angular/common': 'npm:@angular/common/fesm2022/common.mjs', '@angular/compiler': 'npm:@angular/compiler/fesm2022/compiler.mjs', '@angular/platform-browser': 'npm:@angular/platform-browser/fesm2022/platform-browser.mjs', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/fesm2022/platform-browser-dynamic.mjs', '@angular/common/http': 'npm:@angular/common/fesm2022/http.mjs', '@angular/router': 'npm:@angular/router/fesm2022/router.mjs', '@angular/forms': 'npm:@angular/forms/fesm2022/forms.mjs', 'jszip': 'npm:jszip/dist/jszip.min.js', 'typescript': 'npm:typescript/lib/typescript.js', 'ts': './plugin.js', 'tslib':'npm:tslib/tslib.js', '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', '@mescius/spread-sheets': 'npm:@mescius/spread-sheets/index.js', '@mescius/spread-sheets-angular': 'npm:@mescius/spread-sheets-angular/fesm2020/mescius-spread-sheets-angular.mjs', '@grapecity/jsob-test-dependency-package/react-components': 'npm:@grapecity/jsob-test-dependency-package/react-components/index.js' }, // packages tells the System loader how to load when no filename and/or no extension packages: { src: { defaultExtension: 'ts' }, rxjs: { defaultExtension: 'js' }, "node_modules": { defaultExtension: 'js' }, "node_modules/@angular": { defaultExtension: 'mjs' }, "@mescius/spread-sheets-angular": { defaultExtension: 'mjs' }, '@angular/core': { defaultExtension: 'mjs', main: 'core.mjs' } } }); })(this);