This section describes properties that configure Sortable UI component content, behavior, and appearance.
Allows a user to drop an item inside another item.
Selector: allow-drop-inside-item
Default Value: false
This property also requires that you handle the change of hierarchy in code. If an item is dragged within a single component, use the onReorder handler. If the item is dragged from one component to another, use the onAdd and onRemove handlers.
See AlsoAllows a user to reorder sortable items.
Selector: allow-reordering
Default Value: true
This property limits row reordering to the UI and does not affect the data source. You should also handle the effects of the drag and drop to the data source in code. If users reorder items inside a single component, implement the onReorder handler.
To configure drag and drop between components, follow the instructions from the group topic.
Enables automatic scrolling while dragging an item beyond the viewport.
Selector: auto-scroll
Default Value: true
Specifies a DOM element that limits the dragging area.
This property accepts the following value types:
"#elementId"
.document.getElementById("elementId")
.$("#elementId")
.Specifies a custom container in which the draggable item should be rendered.
This property accepts the following value types:
"#elementId"
.document.getElementById("elementId")
.$("#elementId")
.Specifies the cursor offset from the dragged item.
A container for custom data.
Type: any | undefined
Default Value: undefined
Specifies the directions in which an item can be dragged.
Selector: drag-direction
Default Value: 'both'
Specifies custom markup to be shown instead of the item being dragged.
Selector: drag-template
Function parameters:Information about the item being dragged.
Object structure:
Name Type Description fromIndexThe item's original position.
itemData anyThe item's data. Note that you should specify the item data manually.
itemElementThe container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery.
A container in which the template should be rendered.
One of the following:
Default Value: undefined
jQuery$(function() { var treeView = $("#simple-treeview").dxTreeView({ items: treeViewItems, dataStructure: "plain", <!-- ... --> }).dxTreeView("instance"); $("#simple-treeview").dxSortable({ filter: ".dx-treeview-item", allowReordering: true, dragTemplate: dragTemplateFunc, onDragChange: function (e) { e.itemData = e.element.find(".dx-treeview-item")[e.fromIndex].innerText; // your code } }); }); function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; }
<div class="demo-container"> <div class="form"> <div id="simple-treeview"></div> </div> </div>Angular
import { DxSortableModule, DxTreeViewModule } from "devextreme-angular"; // ... export class AppComponent { onDragChange(e){ e.itemData = this.treeViewItems[e.fromIndex].name; // ... } } @NgModule({ imports: [ // ... DxSortableModule, DxTreeViewModule ], // ... })
<dx-sortable filter=".dx-treeview-item" [allowReordering]="true" (onDragChange)="onDragChange($event)" dragTemplate="myDragTemplate" > <div *dxTemplate="let e of 'myDragTemplate'"> <div>{{ e.itemData + " drag template" }}</div> </div> <dx-tree-view id="simple-treeview" [items]="treeViewItems" dataStructure="plain" ...> </dx-tree-view> </dx-sortable>Vue
<template> <DxSortable filter=".dx-treeview-item" :allow-reordering="true" @drag-change="onDragChange" drag-template="myDragTemplate" > <template #myDragTemplate="{ data }"> <div>{{ data.itemData.Task_Subject}} + "drag template"</div> </template> <DxTreeView id="simple-treeview" data-structure="plain" :items="treeViewItems" /> </DxSortable> </template> <script> import DxTreeView from 'devextreme-vue/tree-view'; import DxSortable from 'devextreme-vue/sortable'; export default { components: { DxSortable, DxTreeView }, methods: { onDragChange(e) { e.itemData = this.treeViewItems[e.fromIndex].name; // ... } } } </script>React
import React from 'react'; import TreeView from 'devextreme-react/tree-view'; import Sortable from 'devextreme-react/sortable'; import { Template } from 'devextreme-react/core/template'; function myDragTemplate(e) { return ( e.itemData + " drag template"; ); } class App extends React.Component { constructor(props) { //... } render() { return ( <Sortable filter=".dx-treeview-item" allowReordering={true} onDragChange={this.onDragChange} dragTemplate={myDragTemplate}> <TreeView id="simple-treeview" dataStructure="plain" items={this.state.treeViewItems} /> </Sortable> ); } onDragChange = (e) => { e.itemData = this.state.treeViewItems[e.fromIndex].name; // your code } } export default App;ASP.NET Core Controls
@(Html.DevExtreme().Sortable() .Filter(".dx-treeview-item") .AllowReordering(true) .OnDragChange("onDragChange") .DragTemplate(new JS("dragTemplateFunc")) .Content( Html.DevExtreme().TreeView() .ID("simple-treeview") .DataStructure(TreeViewDataStructure.Plain) .DataSource(d => d.Mvc().LoadAction("GetPlainDataForDragAndDrop")) .DataSourceOptions(o => o.Map("mapIcons")) ) ) <script> function onDragChange(e) { e.itemData = e.element.find(".dx-treeview-item")[e.fromIndex].innerText; // your code } function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; } </script>
Specifies how to highlight the item's drop position.
Selector: drop-feedback-mode
Default Value: 'push'
This property accepts the following values:
"push"
Items move apart with an animation, allowing room for the dragged item to be placed. To use this mode, ensure that the allowDropInsideItem is disabled.
"indicate"
Items are not animated and a blue square appears at the place where the dragged item is going to be placed. The source item remains in place - only the cloned item is dragged.
Specifies the global attributes to be attached to the UI component's container element.
Selector: DxElementAttr
Default Value: {}
jQuery$(function(){ $("#sortableContainer").dxSortable({ // ... elementAttr: { id: "elementId", class: "class-name" } }); });Angular
<dx-sortable ... [elementAttr]="{ id: 'elementId', class: 'class-name' }"> </dx-sortable>
import { DxSortableModule } from "devextreme-angular"; // ... export class AppComponent { // ... } @NgModule({ imports: [ // ... DxSortableModule ], // ... })Vue
<template> <DxSortable ... :element-attr="sortableAttributes"> </DxSortable> </template> <script> import DxSortable from 'devextreme-vue/sortable'; export default { components: { DxSortable }, data() { return { sortableAttributes: { id: 'elementId', class: 'class-name' } } } } </script>React
import React from 'react'; import Sortable from 'devextreme-react/sortable'; class App extends React.Component { sortableAttributes = { id: 'elementId', class: 'class-name' } render() { return ( <Sortable ... elementAttr={this.sortableAttributes}> </Sortable> ); } } export default App;
Specifies a CSS selector for the items that can be dragged.
Allows you to group several UI components, so that users can drag and drop items between them.
Set this property to identical values for the UI components you want to collect into a single group. This allows users to drag and drop items between components, but only in the UI. To handle drag and drop in code, implement the onAdd and onRemove handlers. Both these handlers are executed simultaneously when an item is dropped to the target component, but onAdd is executed in the target component, while onRemove is executed in the source component.
Specifies a CSS selector (ID or class) that should act as the drag handle(s) for the item(s).
Specifies the UI component's height.
This property accepts a value of one of the following types:
Number
The height in pixels.
String
A CSS-accepted measurement of height. For example, "55px"
, "20vh"
, "80%"
, "inherit"
.
Notifies the UI component of the items' orientation.
Selector: item-orientation
Default Value: 'vertical'
Moves an element in the HTML markup when it is dropped.
Selector: move-item-on-drop
Default Value: false
jQueryWe recommend that you set moveItemsOnDrop to true because changes to the data model do not automatically update the HTML markup. If you set this property to false, you should move DOM nodes in the onReorder function.
AngularWe recommend that you set this property to false. In Angular, the HTML markup depends on the data model and is updated automatically when you make changes.
VueWe recommend that you set this property to false. In Vue, the HTML markup depends on the data model and is updated automatically when you make changes.
ReactWe recommend that you set this property to false. In React, the HTML markup depends on the data model and is updated automatically when you make changes.
A function that is called when a new item is added.
Selector: @add
Function parameters:Information about the event that caused the function's execution.
Object structure:
Name Type Description componentThe UI component that raised the event.
dropInsideItemIndicates if the dragged item is dropped inside another item.
elementThe UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.
eventEvent (jQuery or EventObject)
The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery.
fromComponent |The instance of the item's source UI component.
fromData anyCustom data associated with the source UI component.
fromIndexThe item's original position. If the item is dragged from another UI component, the value is -1.
itemData anyThe dragged item's data.
itemElementThe container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery.
toComponent |The instance of the item's target UI component.
toData anyCustom data associated with the target UI component.
toIndexThe position in which the item is placed. If the item is dragged away from the UI component, the value is -1.
Default Value: null
A function that is executed before the UI component is disposed of.
Selector: @disposing
Function parameters:Information about the event.
Object structure:
Default Value: null
A function that is called when the dragged item's position in the list is changed.
Selector: @drag-change
Function parameters:Information about the event that caused the function's execution.
Object structure:
Name Type Description cancelAllows you to cancel the gesture.
component SortableThe UI component that raised the event.
dropInsideItemIndicates if the dragged item is dropped inside another item.
elementThe UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.
eventEvent (jQuery or EventObject)
The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery.
fromComponent |The instance of the item's source UI component. Works only for element drag and drop between components.
fromData anyCustom data associated with the source UI component. Works only for element drag and drop between components.
fromIndexThe item's original position. If the item is dragged from another UI component, the value is -1.
itemData anyThe item's data before the drag operation. Note that you should specify the item data manually.
itemElementThe container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery.
toComponent |The instance of the item's target UI component. Works only for element drag and drop between components.
toData anyCustom data associated with the target UI component. Works only for element drag and drop between components.
toIndexThe position in which the item is placed. If the item is dragged away from the UI component, the value is -1.
Default Value: null
jQuery$(function() { var treeView = $("#simple-treeview").dxTreeView({ items: treeViewItems, dataStructure: "plain", <!-- ... --> }).dxTreeView("instance"); $("#simple-treeview").dxSortable({ filter: ".dx-treeview-item", allowReordering: true, dragTemplate: dragTemplateFunc, onDragChange: function (e) { e.itemData = e.element.find(".dx-treeview-item")[e.fromIndex].innerText; // your code } }); }); function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; }
<div class="demo-container"> <div class="form"> <div id="simple-treeview"></div> </div> </div>Angular
import { DxSortableModule, DxTreeViewModule } from "devextreme-angular"; // ... export class AppComponent { onDragChange(e){ e.itemData = this.treeViewItems[e.fromIndex].name; // ... } } @NgModule({ imports: [ // ... DxSortableModule, DxTreeViewModule ], // ... })
<dx-sortable filter=".dx-treeview-item" [allowReordering]="true" (onDragChange)="onDragChange($event)" dragTemplate="myDragTemplate" > <div *dxTemplate="let e of 'myDragTemplate'"> <div>{{ e.itemData + " drag template" }}</div> </div> <dx-tree-view id="simple-treeview" [items]="treeViewItems" dataStructure="plain" ...> </dx-tree-view> </dx-sortable>Vue
<template> <DxSortable filter=".dx-treeview-item" :allow-reordering="true" @drag-change="onDragChange" :drag-template="myDragTemplate" > <template #myDragTemplate="{ data }"> <div>{{ data.itemData.Task_Subject}} + "drag template"</div> </template> <DxTreeView id="simple-treeview" data-structure="plain" :items="treeViewItems" /> </DxSortable> </template> <script> import DxTreeView from 'devextreme-vue/tree-view'; import DxSortable from 'devextreme-vue/sortable'; export default { components: { DxSortable, DxTreeView }, methods: { onDragChange(e) { e.itemData = this.treeViewItems[e.fromIndex].name; // ... } } } </script>React
import React from 'react'; import TreeView from 'devextreme-react/tree-view'; import Sortable from 'devextreme-react/sortable'; import { Template } from 'devextreme-react/core/template'; function myDragTemplate(e) { return ( e.itemData + " drag template"; ); } class App extends React.Component { constructor(props) { //... } render() { return ( <Sortable filter=".dx-treeview-item" allowReordering={true} onDragChange={this.onDragChange} dragTemplate={myDragTemplate}> <TreeView id="simple-treeview" dataStructure="plain" items={this.state.treeViewItems} /> </Sortable> ); } onDragChange = (e) => { e.itemData = this.state.treeViewItems[e.fromIndex].name; // your code } } export default App;ASP.NET Core Controls
@(Html.DevExtreme().Sortable() .Filter(".dx-treeview-item") .AllowReordering(true) .OnDragChange("onDragChange") .DragTemplate(new JS("dragTemplateFunc")) .Content( Html.DevExtreme().TreeView() .ID("simple-treeview") .DataStructure(TreeViewDataStructure.Plain) .DataSource(d => d.Mvc().LoadAction("GetPlainDataForDragAndDrop")) .DataSourceOptions(o => o.Map("mapIcons")) ) ) <script> function onDragChange(e) { e.itemData = e.element.find(".dx-treeview-item")[e.fromIndex].innerText; // your code } function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; } </script>
A function that is called when the drag gesture is finished.
Selector: @drag-end
Function parameters:Information about the event that caused the function's execution.
Object structure:
Name Type Description cancelAllows you to cancel the gesture.
component SortableThe UI component that raised the event.
dropInsideItemIndicates if the dragged item is dropped inside another item.
elementThe UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.
eventEvent (jQuery or EventObject)
The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery.
fromComponent |The instance of the item's source UI component. Works only for element drag and drop between components.
fromData anyCustom data associated with the source UI component. Works only for element drag and drop between components.
fromIndexThe item's original position. If the item is dragged from another UI component, the value is -1.
itemData anyThe item's data before the drag operation. Note that you should specify the item data manually.
itemElementThe container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery.
toComponent |The instance of the item's target UI component. Works only for element drag and drop between components.
toData anyCustom data associated with the target UI component. Works only for element drag and drop between components.
toIndexThe position in which the item is placed. If the item is dragged away from the UI component, the value is -1.
Default Value: null
jQuery$(function() { var treeView = $("#simple-treeview").dxTreeView({ items: treeViewItems, dataStructure: "plain", <!-- ... --> }).dxTreeView("instance"); $("#simple-treeview").dxSortable({ filter: ".dx-treeview-item", allowReordering: true, dragTemplate: dragTemplateFunc, onDragEnd: function (e) { e.itemData = e.element.find(".dx-treeview-item")[e.fromIndex].innerText; // your code } }); }); function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; }
<div class="demo-container"> <div class="form"> <div id="simple-treeview"></div> </div> </div>Angular
import { DxSortableModule, DxTreeViewModule } from "devextreme-angular"; // ... export class AppComponent { onDragEnd(e){ e.itemData = this.treeViewItems[e.fromIndex].name; // ... } } @NgModule({ imports: [ // ... DxSortableModule, DxTreeViewModule ], // ... })
<dx-sortable filter=".dx-treeview-item" [allowReordering]="true" (onDragEnd)="onDragEnd($event)" dragTemplate="myDragTemplate" > <div *dxTemplate="let e of 'myDragTemplate'"> <div>{{ e.itemData + " drag template" }}</div> </div> <dx-tree-view id="simple-treeview" [items]="treeViewItems" dataStructure="plain" ...> </dx-tree-view> </dx-sortable>Vue
<template> <DxSortable filter=".dx-treeview-item" :allow-reordering="true" @drag-end="onDragEnd" :drag-template="myDragTemplate" > <template #myDragTemplate="{ data }"> <div>{{ data.itemData.Task_Subject}} + "drag template"</div> </template> <DxTreeView id="simple-treeview" data-structure="plain" :items="treeViewItems" /> </DxSortable> </template> <script> import DxTreeView from 'devextreme-vue/tree-view'; import DxSortable from 'devextreme-vue/sortable'; export default { components: { DxSortable, DxTreeView }, data() { return { myDragTemplate: "myDragTemplate", //... }; }, methods: { onDragEnd(e) { e.itemData = this.treeViewItems[e.fromIndex].name; // ... } } } </script>React
import React from 'react'; import TreeView from 'devextreme-react/tree-view'; import Sortable from 'devextreme-react/sortable'; import { Template } from 'devextreme-react/core/template'; function myDragTemplate(e) { return ( e.itemData + " drag template"; ); } class App extends React.Component { constructor(props) { //... } render() { return ( <Sortable filter=".dx-treeview-item" allowReordering={true} onDragEnd={this.onDragEnd} dragTemplate={myDragTemplate}> <TreeView id="simple-treeview" dataStructure="plain" items={this.state.treeViewItems} /> </Sortable> ); } onDragEnd = (e) => { e.itemData = this.state.treeViewItems[e.fromIndex].name; // your code } } export default App;ASP.NET Core Controls
@(Html.DevExtreme().Sortable() .Filter(".dx-treeview-item") .AllowReordering(true) .OnDragEnd("onDragEnd") .DragTemplate(new JS("dragTemplateFunc")) .Content( Html.DevExtreme().TreeView() .ID("simple-treeview") .DataStructure(TreeViewDataStructure.Plain) .DataSource(d => d.Mvc().LoadAction("GetPlainDataForDragAndDrop")) .DataSourceOptions(o => o.Map("mapIcons")) ) ) <script> function onDragEnd(e) { e.itemData = e.element.find(".dx-treeview-item")[e.fromIndex].innerText; // your code } function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; } </script>
A function that is called every time a draggable item is moved.
Selector: @drag-move
Function parameters:Information about the event that caused the function's execution.
Object structure:
Name Type Description cancelAllows you to cancel the gesture.
component SortableThe UI component that raised the event.
dropInsideItemIndicates if the dragged item is dropped inside another item.
elementThe UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.
eventEvent (jQuery or EventObject)
The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery.
fromComponent |The instance of the item's source UI component. Works only for element drag and drop between components.
fromData anyCustom data associated with the source UI component. Works only for element drag and drop between components.
fromIndexThe item's original position. If the item is dragged from another UI component, the value is -1.
itemData anyThe item's data before the drag operation. Note that you should specify the item data manually.
itemElementThe container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery.
toComponent |The instance of the item's target UI component. Works only for element drag and drop between components.
toData anyCustom data associated with the target UI component. Works only for element drag and drop between components.
toIndexThe position in which the item is placed. If the item is dragged away from the UI component, the value is -1.
Default Value: null
jQuery$(function() { var treeView = $("#simple-treeview").dxTreeView({ items: treeViewItems, dataStructure: "plain", <!-- ... --> }).dxTreeView("instance"); $("#simple-treeview").dxSortable({ filter: ".dx-treeview-item", allowReordering: true, dragTemplate: dragTemplateFunc, onDragMove: function (e) { e.itemData = e.element.find(".dx-treeview-item")[e.fromIndex].innerText; // your code } }); }); function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; }
<div class="demo-container"> <div class="form"> <div id="simple-treeview"></div> </div> </div>Angular
import { DxSortableModule, DxTreeViewModule } from "devextreme-angular"; // ... export class AppComponent { onDragMove(e){ e.itemData = this.treeViewItems[e.fromIndex].name; // ... } } @NgModule({ imports: [ // ... DxSortableModule, DxTreeViewModule ], // ... })
<dx-sortable filter=".dx-treeview-item" [allowReordering]="true" (onDragMove)="onDragMove($event)" dragTemplate="myDragTemplate" > <div *dxTemplate="let e of 'myDragTemplate'"> <div>{{ e.itemData + " drag template" }}</div> </div> <dx-tree-view id="simple-treeview" [items]="treeViewItems" dataStructure="plain" ...> </dx-tree-view> </dx-sortable>Vue
<template> <DxSortable filter=".dx-treeview-item" :allow-reordering="true" @drag-move="onDragMove" :drag-template="myDragTemplate" > <template #myDragTemplate="{ data }"> <div>{{ data.itemData.Task_Subject}} + "drag template"</div> </template> <DxTreeView id="simple-treeview" data-structure="plain" :items="treeViewItems" /> </DxSortable> </template> <script> import DxTreeView from 'devextreme-vue/tree-view'; import DxSortable from 'devextreme-vue/sortable'; export default { components: { DxSortable, DxTreeView }, data() { return { myDragTemplate: "myDragTemplate", //... }; }, methods: { onDragMove(e) { e.itemData = this.treeViewItems[e.fromIndex].name; // ... } } } </script>React
import React from 'react'; import TreeView from 'devextreme-react/tree-view'; import Sortable from 'devextreme-react/sortable'; import { Template } from 'devextreme-react/core/template'; function myDragTemplate(e) { return ( e.itemData + " drag template"; ); } class App extends React.Component { constructor(props) { //... } render() { return ( <Sortable filter=".dx-treeview-item" allowReordering={true} onDragMove={this.onDragMove} dragTemplate={myDragTemplate}> <TreeView id="simple-treeview" dataStructure="plain" items={this.state.treeViewItems} /> </Sortable> ); } onDragMove = (e) => { e.itemData = this.state.treeViewItems[e.fromIndex].name; // your code } } export default App;ASP.NET Core Controls
@(Html.DevExtreme().Sortable() .Filter(".dx-treeview-item") .AllowReordering(true) .OnDragMove("onDragMove") .DragTemplate(new JS("dragTemplateFunc")) .Content( Html.DevExtreme().TreeView() .ID("simple-treeview") .DataStructure(TreeViewDataStructure.Plain) .DataSource(d => d.Mvc().LoadAction("GetPlainDataForDragAndDrop")) .DataSourceOptions(o => o.Map("mapIcons")) ) ) <script> function onDragMove(e) { e.itemData = e.element.find(".dx-treeview-item")[e.fromIndex].innerText; // your code } function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; } </script>
A function that is called when a drag gesture is initialized.
Selector: @drag-start
Function parameters:Information about the event that caused the function's execution.
Object structure:
Name Type Description cancelAllows you to cancel the gesture.
component SortableThe UI component that raised the event.
elementThe UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.
eventEvent (jQuery or EventObject)
The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery.
fromData anyCustom data associated with the source UI component. Works only for element drag and drop between components.
fromIndexThe item's original position. If the item is dragged from another UI component, the value is -1.
itemData anyThe item's data before the drag operation. Note that you should specify the item data manually.
itemElementThe container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery.
Default Value: null
jQuery$(function() { var treeView = $("#simple-treeview").dxTreeView({ items: treeViewItems, dataStructure: "plain", <!-- ... --> }).dxTreeView("instance"); $("#simple-treeview").dxSortable({ filter: ".dx-treeview-item", allowReordering: true, dragTemplate: dragTemplateFunc, onDragStart: function (e) { e.itemData = e.element.find(".dx-treeview-item")[e.fromIndex].innerText; // your code } }); }); function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; }
<div class="demo-container"> <div class="form"> <div id="simple-treeview"></div> </div> </div>Angular
import { DxSortableModule, DxTreeViewModule } from "devextreme-angular"; // ... export class AppComponent { onDragStart(e){ e.itemData = this.treeViewItems[e.fromIndex].name; // ... } } @NgModule({ imports: [ // ... DxSortableModule, DxTreeViewModule ], // ... })
<dx-sortable filter=".dx-treeview-item" [allowReordering]="true" (onDragStart)="onDragStart($event)" dragTemplate="myDragTemplate" > <div *dxTemplate="let e of 'myDragTemplate'"> <div>{{ e.itemData + " drag template" }}</div> </div> <dx-tree-view id="simple-treeview" [items]="treeViewItems" dataStructure="plain" ...> </dx-tree-view> </dx-sortable>Vue
<template> <DxSortable filter=".dx-treeview-item" :allow-reordering="true" @drag-start="onDragStart" :drag-template="myDragTemplate" > <template #myDragTemplate="{ data }"> <div>{{ data.itemData.Task_Subject}} + "drag template"</div> </template> <DxTreeView id="simple-treeview" data-structure="plain" :items="treeViewItems" /> </DxSortable> </template> <script> import DxTreeView from 'devextreme-vue/tree-view'; import DxSortable from 'devextreme-vue/sortable'; export default { components: { DxSortable, DxTreeView }, data() { return { myDragTemplate: "myDragTemplate", //... }; }, methods: { onDragStart(e) { e.itemData = this.treeViewItems[e.fromIndex].name; // ... } } } </script>React
import React from 'react'; import TreeView from 'devextreme-react/tree-view'; import Sortable from 'devextreme-react/sortable'; import { Template } from 'devextreme-react/core/template'; function myDragTemplate(e) { return ( e.itemData + " drag template"; ); } class App extends React.Component { constructor(props) { //... } render() { return ( <Sortable filter=".dx-treeview-item" allowReordering={true} onDragStart={this.onDragStart} dragTemplate={myDragTemplate}> <TreeView id="simple-treeview" dataStructure="plain" items={this.state.treeViewItems} /> </Sortable> ); } onDragStart = (e) => { e.itemData = this.state.treeViewItems[e.fromIndex].name; // your code } } export default App;ASP.NET Core Controls
@(Html.DevExtreme().Sortable() .Filter(".dx-treeview-item") .AllowReordering(true) .OnDragStart("onDragStart") .DragTemplate(new JS("dragTemplateFunc")) .Content( Html.DevExtreme().TreeView() .ID("simple-treeview") .DataStructure(TreeViewDataStructure.Plain) .DataSource(d => d.Mvc().LoadAction("GetPlainDataForDragAndDrop")) .DataSourceOptions(o => o.Map("mapIcons")) ) ) <script> function onDragStart(e) { e.itemData = e.element.find(".dx-treeview-item")[e.fromIndex].innerText; // your code } function dragTemplateFunc(item, customContainer){ var $customContainer = $(document.createElement("div")) .text(item.itemData + ' drag template'); return $customContainer; } </script>
A function used in JavaScript frameworks to save the UI component instance.
Selector: @initialized
Function parameters:Information about the event.
Object structure:
Default Value: null
Angular<dx-sortable ... (onInitialized)="saveInstance($event)"> </dx-sortable>
import { Component } from "@angular/core"; import Sortable from "devextreme/ui/data_grid"; // ... export class AppComponent { sortableInstance: Sortable; saveInstance (e) { this.sortableInstance = e.component; } }Vue
App.vue (Composition API)
<template> <div> <DxSortable ... @initialized="saveInstance"> </DxSortable> </div> </template> <script> import DxSortable from 'devextreme-vue/sortable'; export default { components: { DxSortable }, data: function() { return { sortableInstance: null }; }, methods: { saveInstance: function(e) { this.sortableInstance = e.component; } } }; </script>
<template> <div> <DxSortable ... @initialized="saveInstance"> </DxSortable> </div> </template> <script setup> import DxSortable from 'devextreme-vue/sortable'; let sortableInstance = null; const saveInstance = (e) => { sortableInstance = e.component; } </script>React
import Sortable from 'devextreme-react/sortable'; class App extends React.Component { constructor(props) { super(props); this.saveInstance = this.saveInstance.bind(this); } saveInstance(e) { this.sortableInstance = e.component; } render() { return ( <div> <Sortable onInitialized={this.saveInstance} /> </div> ); } }See Also jQuery
A function that is executed after a UI component property is changed.
Selector: @option-changed
Function parameters:Information about the event.
Object structure:
Name Type Description value anyThe modified property's new value.
previousValue anyThe UI component's previous value.
nameThe modified property if it belongs to the first level. Otherwise, the first-level property it is nested into.
fullNameThe path to the modified property that includes all parent properties.
elementThe UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.
component SortableThe UI component's instance.
Default Value: null
The following example shows how to subscribe to component property changes:
jQuery$(function() { $("#sortableContainer").dxSortable({ // ... onOptionChanged: function(e) { if(e.name === "changedProperty") { // handle the property change here } } }); });Angular
<dx-sortable ... (onOptionChanged)="handlePropertyChange($event)"> </dx-sortable>
import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { // ... handlePropertyChange(e) { if(e.name === "changedProperty") { // handle the property change here } } }
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppComponent } from './app.component'; import { DxSortableModule } from 'devextreme-angular'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, DxSortableModule ], providers: [ ], bootstrap: [AppComponent] }) export class AppModule { }Vue
<template> <DxSortable ... @option-changed="handlePropertyChange" /> </template> <script> import 'devextreme/dist/css/dx.light.css'; import DxSortable from 'devextreme-vue/sortable'; export default { components: { DxSortable }, // ... methods: { handlePropertyChange: function(e) { if(e.name === "changedProperty") { // handle the property change here } } } } </script>React
import React from 'react'; import 'devextreme/dist/css/dx.light.css'; import Sortable from 'devextreme-react/sortable'; const handlePropertyChange = (e) => { if(e.name === "changedProperty") { // handle the property change here } } export default function App() { return ( <Sortable ... onOptionChanged={handlePropertyChange} /> ); }
A function that is called when a draggable item is removed.
Selector: @remove
Function parameters:Information about the event that caused the function's execution.
Object structure:
Name Type Description component SortableThe UI component that raised the event.
elementThe UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.
eventEvent (jQuery or EventObject)
The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery.
fromComponent |The instance of the item's source UI component.
fromData anyCustom data associated with the source UI component.
fromIndexThe item's original position. If the item is dragged from another UI component, the value is -1.
itemData anyThe dragged item's data.
itemElementThe container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery.
toComponent |The instance of the item's target UI component.
toData anyCustom data associated with the target UI component.
toIndexThe position in which the item is placed. If the item is dragged away from the UI component, the value is -1.
Default Value: null
A function that is called when the draggable items are reordered.
Selector: @reorder
Function parameters:Information about the event that caused the function's execution.
Object structure:
Name Type Description component SortableThe UI component that raised the event.
dropInsideItemIndicates if the dragged item is dropped inside another item.
elementThe UI component's container. It is an HTML Element or a jQuery Element when you use jQuery.
eventEvent (jQuery or EventObject)
The event that caused the function to execute. It is an EventObject or a jQuery.Event when you use jQuery.
fromComponent |The instance of the item's source UI component.
fromData anyCustom data associated with the source UI component.
fromIndexThe item's original position. If the item is dragged from another UI component, the value is -1.
itemData anyThe dragged item's data.
itemElementThe container of the item being dragged. It is an HTML Element or a jQuery Element when you use jQuery.
promisePromise<void> (jQuery or native)
Assign a Promise to this field to perform an asynchronous operation.
toComponent |The instance of the item's target UI component.
toData anyCustom data associated with the target UI component.
toIndexThe position in which the item is placed. If the item is dragged away from the UI component, the value is -1.
Default Value: null
Switches the UI component to a right-to-left representation.
Selector: rtl-enabled
Default Value: false
When this property is set to true, the UI component text flows from right to left, and the layout of elements is reversed. To switch the entire application/site to the right-to-left representation, assign true to the rtlEnabled field of the object passed to the DevExpress.config(config) method.
DevExpress.config({ rtlEnabled: true });
DataGrid Demo Navigation UI Demo Editors Demo
Specifies the distance in pixels from the edge of viewport at which scrolling should start. Applies only if autoScroll is true.
Selector: scroll-sensitivity
Default Value: 60
Specifies the scrolling speed when dragging an item beyond the viewport. Applies only if autoScroll is true.
Selector: scroll-speed
Default Value: 30
Specifies the UI component's width.
This property accepts a value of one of the following types:
Number
The width in pixels.
String
A CSS-accepted measurement of width. For example, "55px"
, "20vw"
, "80%"
, "auto"
, "inherit"
.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4