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