I am dragging items between the nodes. I am getting the error if i swap two nodes on the same level. could any one help me. The sample code is here. I have tested with 3 levels of nodes
<script language="javascript" type="text/javascript"> |
function onNodeDropping(sender, args) |
{ |
var dest = args.get_destNode(); |
if (dest) |
{ |
clientSideEdit(sender, args); |
args.set_cancel(true); |
return; |
//dropOnTree(args); |
} |
else |
{ |
dropOnHtmlElement(args); |
} |
} |
function clientSideEdit(sender, args) |
{ |
if(isValidDrop(sender,args)==false) |
{ |
args.set_cancel(true); |
return; |
} |
var destinationNode = args.get_destNode(); |
if(destinationNode) |
{ |
var firstTreeView = $find('trvOne'); |
var secondTreeView = $find('trvOne'); |
firstTreeView.trackChanges(); |
// secondTreeView.trackChanges(); |
var sourceNodes = args.get_sourceNodes(); |
var sourceNode = sourceNodes[0]; |
sourceNode.get_parent().get_nodes().remove(sourceNode); |
//if(args.get_dropPosition() == "over") destinationNode.get_nodes().add(sourceNode); |
//if(args.get_dropPosition() == "above") insertBefore(destinationNode, sourceNode); |
//if(args.get_dropPosition() == "below") insertAfter(destinationNode, sourceNode); |
insertBefore(destinationNode, sourceNode); |
//sourceNode.clone(); |
destinationNode.set_expanded(true); |
firstTreeView.commitChanges(); |
//secondTreeView.commitChanges(); |
} |
} |
function insertBefore(destinationNode, sourceNode) |
{ |
var destinationParent = destinationNode.get_parent(); |
var index = destinationParent.get_nodes().indexOf(destinationNode); |
destinationParent.get_nodes().insert(index, sourceNode); |
} |
function insertAfter(destinationNode, sourceNode) |
{ |
var destinationParent = destinationNode.get_parent(); |
var index = destinationParent.get_nodes().indexOf(destinationNode); |
destinationParent.get_nodes().insert(index+1, sourceNode); |
} |
function isValidDrop(sender, args) |
{ |
var tree = $find('trvOne'); |
var sourceNode = args.get_sourceNode(); |
var destinationNode = args.get_destNode(); |
var sourceNodeLevel; |
var destinationNodeLevel; |
sourceNodeLevel=getNodeLevel(sourceNode); |
destinationNodeLevel=getNodeLevel(destinationNode); |
if(sourceNodeLevel==destinationNodeLevel) |
return true; |
else |
return false; |
/* |
if(!sourceNode.get_parent()) |
{ |
args.set_cancel(true); |
tree._clearDrag(); |
return false; |
} |
if(sourceNode.get_parent() && !(sourceNode.get_parent().get_parent())) |
{ |
args.set_cancel(true); |
tree._clearDrag(); |
return false; |
} |
if(sourceNode.get_parent() && sourceNode.get_parent().get_parent() && !(sourceNode.get_parent().get_parent().get_parent())) |
{ |
args.set_cancel(true); |
tree._clearDrag(); |
return false; |
} |
*/ |
} |
function getNodeLevel(node) |
{ |
var FirstParent; |
var SecondParent; |
var ThirdParent; |
var Level; |
FirstParent=node.get_parent(); |
if(FirstParent) |
SecondParent=FirstParent.get_parent(); |
if(SecondParent) |
ThirdParent=SecondParent.get_parent(); |
if(ThirdParent) |
Level=3; |
else if(SecondParent) |
Level=2; |
else if(FirstParent) |
Level=1; |
return Level; |
} |
function dropOnHtmlElement(args) |
{ |
var target = args.get_htmlElement(); |
if (target.tagName == "SELECT" && target.id=='lstShortCut') |
{ |
if(getNodeLevel(args.get_sourceNode())!=3) |
{ |
args.set_cancel(true); |
return; |
} |
target.style.cursor = "default"; |
//target.value = args.get_sourceNode().get_text(); |
var sourceNodeValue=args.get_sourceNode().get_value(); |
for(var i=0;i<target.options.length;i++) |
{ |
if(target.options[i].value==sourceNodeValue) |
{ |
args.set_cancel(true); |
return true; |
} |
} |
var newnewOpt = new Option( args.get_sourceNode().get_text(), args.get_sourceNode().get_value(), true, false); |
target.options[target.options.length] = newOpt; |
args.set_cancel(true); |
return true; |
} |
} |
</script> |
<radT:RadAjaxManager ID="RadAjaxManager1" runat="server"> |
<AjaxSettings> |
<radT:AjaxSetting AjaxControlID="trvOne"> |
<UpdatedControls> |
<radT:AjaxUpdatedControl ControlID="trvOne" /> |
</UpdatedControls> |
</radT:AjaxSetting> |
</AjaxSettings> |
</radT:RadAjaxManager> |
<radT:RadTreeView ID="trvOne" runat="server" |
EnableViewState="true" SingleExpandPath="true" EnableDragAndDrop="true" OnClientNodeDropping="onNodeDropping" Height="350px"> |