
# Drag and drop from grid to another DIV

Drag and drop selected rows or rows within the grid to another DIV.
When you drag grid data and drop it into the right div area, the value is displayed.

```js
const fields = [
  { fieldName: 'KorName', dataType: 'text' },
  { fieldName: 'Gender', dataType: 'text' },
  { fieldName: 'Age', dataType: 'number' },
  { fieldName: 'Phone', dataType: 'text' },
  { fieldName: 'ProductId', dataType: 'text' },
  { fieldName: 'KorCountry', dataType: 'text' },
  { fieldName: 'OrderDate', dataType: 'datetime', datetimeFormat: 'yyyy-MM-dd', amText: 'AM', pmText: 'PM' },
  { fieldName: 'CardNumber', dataType: 'text' },
  { fieldName: 'Monetary', dataType: 'text' },
  { fieldName: 'StartDate', dataType: 'datetime', datetimeFormat: 'yyyy-MM-dd', amText: 'AM', pmText: 'PM' },
  { fieldName: 'EndDate', dataType: 'datetime', datetimeFormat: 'yyyy-MM-dd', amText: 'AM', pmText: 'PM' },
  { fieldName: 'ToMonth', dataType: 'number' },
  { fieldName: 'Month', dataType: 'number' },
  { fieldName: 'Year', dataType: 'number' },
  { fieldName: 'InterestRate', dataType: 'number' },
  { fieldName: 'SaveCost', dataType: 'number' },
  { fieldName: 'SaveMaturity', dataType: 'number' },
  { fieldName: 'CurrentSave', dataType: 'number' }
];

const columns = [
  { name: 'KorName', fieldName: 'KorName', width: '60', header: { text: 'Name' } },
  { name: 'Gender', fieldName: 'Gender', width: '40', header: { text: 'Gender' } },
  { name: 'Age', fieldName: 'Age', width: '40', header: { text: 'Age' }, styleName: 'right-column' },
  { name: 'Phone', fieldName: 'Phone', width: '100', header: { text: 'Phone' } },
  { name: 'ProductId', fieldName: 'ProductId', width: '120', header: { text: 'Product ID' } },
  { name: 'KorCountry', fieldName: 'KorCountry', width: '100', header: { text: 'Investment Country' } },
  { name: 'OrderDate', fieldName: 'OrderDate', width: '100', header: { text: 'Order Date' } },
  { name: 'CardNumber', fieldName: 'CardNumber', width: '140', header: { text: 'Card Number' } },
  { name: 'Monetary', fieldName: 'Monetary', width: '40', header: { text: 'Currency' } },
  { name: 'StartDate', fieldName: 'StartDate', width: '100', header: { text: 'First Payment Date' } },
  { name: 'EndDate', fieldName: 'EndDate', width: '100', header: { text: 'End Date' } },
  { name: 'ToMonth', fieldName: 'ToMonth', width: '50', header: { text: 'Payment Count' }, styleName: 'right-column' },
  { name: 'Month', fieldName: 'Month', width: '50', header: { text: 'Remaining Count' }, styleName: 'right-column' },
  { name: 'InterestRate', fieldName: 'InterestRate', width: '50', numberFormat: '0.00', header: { text: 'Interest Rate' }, styleName: 'right-column' },
  { name: 'SaveCost', fieldName: 'SaveCost', width: '80', numberFormat: '#,##0', header: { text: 'Payment Amount' }, styleName: 'right-column' },
  { name: 'SaveMaturity', fieldName: 'SaveMaturity', width: '80', numberFormat: '#,##0', header: { text: 'Maturity Amount' }, styleName: 'right-column' },
  { name: 'CurrentSave', fieldName: 'CurrentSave', width: '80', numberFormat: '#,##0', header: { text: 'Current Balance' }, styleName: 'right-column' }
];

const { gridView, dataProvider } = RealGrid.createGrid('realgrid', {
  columns,
  header: {
    height: 40
  },
  display: {
    rowHeight: 36,
    emptyMessage: 'No data to display.'
  },
  edit: {
    insertable: true,
    appendable: true,
    movable: true
  },
  footer: {
    height: 40
  },
  stateBar: {
    width: 25
  },
  onInitialized: (grid) => {
    fetch('/data/en/simple_data.json')
      .then(response => response.json())
      .then(data => {
        grid.getDataSource().setRows(data);
      });
  }
}, {
  fields
});

window.gridView = gridView;
window.dataProvider = dataProvider;

function setDropOther() {
  var checked = document.getElementById('checkbox_DropOther').checked;
  gridView.dataDropOptions.dropOtherElement = checked;
  gridView.dataDropOptions.callback = checked ? (source, items, target, targetIndex, targetCell) => {
    if (!(target instanceof HTMLDivElement)) {
      return;
    }
    
    target.textContent = '';
    if (target.id === 'div1') {
      items.forEach((itemIndex) => {
        const value = source.getValue(itemIndex, 'KorName');
        target.innerHTML += value + '<br/>';
      });
    } else {
      var text = gridView.copyToClipboard(gridView.getSelection(), false);
      target.textContent = text;
    }
  } : undefined;
}

setDropOther();
```

### Drag and drop settings

Set it to a grid so that you can use the drag and drop function from the grid to other ELEMENTs.

```js
gridView.editOptions.movable = true;

gridView.dataDropOptions.dropOtherElement = true;
```

```js
gridView.dataDropOptions.dragCallback = (source, items, target) => {
     if (!(target instanceof HTMLDivElement)) {
         return false;
     }
     if (target.id === "div1") {
       return items.length > 1;
     }
     return true;
}

gridView.dataDropOptions.callback = (source, items, target, targetIndex, targetCell) => {
   if (!(target instanceof HTMLDivElement)) {
       return;
     }
    
   target.textContent = "";
   if (target.id === "div1") {
     items.forEach((itemIndex) => {
       const value = source.getValue(itemIndex, "KorName");
         target.innerHTML += value + "<br/>";
     });
   } else {
     var text = gridView.copyToClipboard(gridView.getSelection(), false);
     target.textContent = text;
   }
}

```

### How to use drag and drop

* The cursor changes so that you can move it when you hover the mouse over the cell to be moved in the selection area.
* When selecting a range, the cursor changes so that it can be moved by hovering the mouse to the location in front of the selected cell.
* When using a shortcut key, the cursor changes so that it can be moved by hovering over the area selected for focus and scope.
* Shortcut keys: `Ctrl` + `Alt` (windows), `command` + `options` (mac)
* To move a row, you must drag while the mouse cursor has changed.