RealGrid2 가이드
트리 🆕
트리 노드 이동 🆕

트리 - node move

트리 그리드에서 같은 레벨의 다른 부모의 값으로 노드를 드래그 앤 드롭방식으로 이동시킬 수 있습니다.

아래 예제는 같은 레벨의 다른 부모 위치로만 이동이 가능하도록 구현된 예제입니다. 사용자가 직접 dataDropOptions.callback을 수정해서 원하는 위치에 값이 이동될 수 있도록 조건을 변경해서 사용해야 합니다.

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);
            }
        }
        }
    }
};