ドラッグ&ドロップ

このサンプルではリストコントロールのドラッグ&ドロップ機能などの使用を示しています。

リストコントロールでドラッグ&ドロップによるリスト項目の並び替えることができます。また、複数のリストコントロールが存在する場合、コントロールの間で行のドラッグを実行できます。 概要 リストコントロールでドラッグ&ドロップ機能を使用するにはdragDropプロパティにtrueを設定します。また、チェックボックスによる選択の場合、dragSourceプロパティをcheckedに設定することで、選択行のドラッグ&ドロップを実行できます。 dragSourceプロパティに設定できる値は以下のとおりで、既定値はListBoxDragSource.Selectedです。 値 説明 Selected 既定値。選択する行ををドラッグ&ドロップします。 Checked チェックする行ををドラッグ&ドロップします。 イベント ドラッグ&ドロップを操作するときに発生するイベントを設定できます。 イベント 説明 Dropping ドラッグ&ドロップを実行する直前に発生します。 Dropped ドラッグ&ドロップを実行したときに発生します。 以下のサンプルコードでは、ドラッグ&ドロップを操作する直前と後にアラート通知を表示します。
import '@mescius/inputman/CSS/gc.inputman-js.css'; import { InputMan } from '@mescius/inputman'; import orders from './data'; InputMan.appearanceStyle = InputMan.AppearanceStyle.Modern; const columns = [ { name: 'id', label: '商品コード', width: 80 }, { name: 'product', label: '商品名', width: 200 }, { name: 'date', label: '受注日', width: 120 }, { name: 'price', label: '単価', width: 80 }, { name: 'amount', label: '数量', width: 80 }, ]; const gcListBox1 = new InputMan.GcListBox(document.getElementById('gcListBox1'), { items: orders, columns: columns, dragDrop: true, selectionMode: GC.InputMan.ListBoxSelectionMode.MultipleExt, }); const gcListBox2 = new InputMan.GcListBox(document.getElementById('gcListBox2'), { items: orders, columns: columns, showCheckBox: true, dragDrop: true, dragSource: 'checked', selectionMode: GC.InputMan.ListBoxSelectionMode.MultipleExt, }); gcListBox1.addEventListener('dropping', (s, e) => { const isInsert = confirm( `行${e.insertIndex}をドラッグ&ドロップします。よろしいですか?` ); if (!isInsert) { e.cancel = true; } }); gcListBox1.addEventListener('dropped', (s, e) => { alert(`行${e.insertIndex}がドロップされました。`); }); gcListBox2.addEventListener('dropping', (s, e) => { const isInsert = confirm( `行${e.insertIndex}をドラッグ&ドロップします。よろしいですか?` ); if (!isInsert) { e.cancel = true; } }); gcListBox2.addEventListener('dropped', (s, e) => { alert(`行${e.insertIndex}がドロップされました。`); }); const dragSource = [ GC.InputMan.ListBoxDragSource.Checked, GC.InputMan.ListBoxDragSource.Selected, ]; document.getElementById('setDragSource').addEventListener('change', (e) => { gcListBox2.dragSource = dragSource[e.target.selectedIndex]; });
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>リストコントロール - ドラッグ&ドロップ</title> <!-- SystemJS --> <script src="node_modules/systemjs/dist/system.src.js"></script> <script src="systemjs.config.js"></script> <script> window.onload = function() { System.import('./src/app'); } </script> </head> <body> <select id="gcListBox1"></select> <br> <select id="gcListBox2"></select> <table class="sample"> <tr> <th>ドラッグ&ドロップ対象</th> <td> <select id="setDragSource"> <option selected>チェックする行をドラッグ&ドロップする</option> <option>選択する行ををドラッグ&ドロップする</option> </select> </td> </tr> </table> </body> </html>
module.exports = [ { id: 15, product: 'ピュアデミグラスソース', date: '2017/01/10', price: 200, amount: 30 }, { id: 17, product: 'だしこんぶ', date: '2017/01/08', price: 290, amount: 50 }, { id: 18, product: 'ピリカラタバスコ', date: '2017/01/12', price: 200, amount: 20 }, { id: 84, product: 'なまわさび', date: '2017/01/21', price: 200, amount: 40 }, { id: 85, product: 'なまからし', date: '2017/01/13', price: 200, amount: 40 }, { id: 86, product: 'なましょうが', date: '2017/01/20', price: 200, amount: 40 }, ];
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: { '@mescius/inputman': 'npm:@mescius/inputman/index.js', '@mescius/inputman/CSS': 'npm:@mescius/inputman/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' }, } });