RealGrid2 Guide
Tree
Tree node move

tree - node move

In the tree grid, you can move a node to another parent's value at the same level by dragging and dropping it.

The example below is implemented so that movement is possible only to other parent locations on the same level. The user must directly modify dataDropOptions.callback and change the conditions so that the value can be moved to the desired location.

treeView.editOptions.movable = true;
treeView.dataDropOptions.callback = function (source, sourceItems, target, targetItem) {
    var rowIds = source.getRowsOfItems(sourceItems);
 
    if(sourceItems[0] > targetItem){
        if(source.getModel(sourceItems[0]).parentId !=target.getModel(targetItem).parentId ){
        targetItem = targetItem - 1;
        }
    }
 
    var sourceParentId = source.getModel(sourceItems[0]).parentId;
    var targetParentId = target.getModel(targetItem).parentId;
 
    var targetRowId = source.getDataRow(targetItem);
    var targetParentRow = treeProvider.getParent(targetRowId);
 
    if (sourceParentId === targetParentId) {
        var startIndex = source.getModel(sourceItems[0], true).childIndex;
        var endIndex = target.getModel(targetItem, true).childIndex;
        for (var i = 0; i < rowIds.length; i++) {
        treeProvider.moveRowSibling(rowIds[i], endIndex - startIndex);
        }
    } else {
        var targetLevel = treeProvider.getLevel(targetRowId);
        for (var i = 0; i < rowIds.length; i++) {
        var sourceLevel = treeProvider.getLevel(rowIds[i]);
        if (sourceLevel === targetLevel) {
            treeProvider.changeRowParent(rowIds[i], targetParentRow, target.getModel(targetItem, true).childIndex + 1);
        }else if(sourceLevel -1 === targetLevel){
            if(target.getModel(targetItem, true).expanded){
            treeProvider.changeRowParent(rowIds[i], targetRowId, 0);
            }
        }
        }
    }
};