RadTreeView for ASP.NET

Drag and Drop In-Between Nodes Send comments on this topic.
See Also
Using the Drag and Drop Functionality > Drag and Drop In-Between Nodes

Glossary Item Box

Telerik RadTreeView now supports drag and drop of nodes in-between nodes. To enable the feature you should set the DragAndDropBetweenNodes property of the RadTreeView object to true.

A code example is shown below.

Example:

ASPX Copy Code
<rad:RadTreeView
            
ID="RadTree1"
            
Runat="Server"
            
Width="300"
            
Height="300"
            
DragAndDrop="True"
            
ImagesBaseDir="~/Img/Outlook"
            
ContentFile="~/tree.xml"
            
OnNodeDrop="HandleDrop"
            
DragAndDropBetweenNodes="True"/>

In the code-behind you should use the DropPosition property of the RadTreeNodeEventArgs object to determine the position where the dragged node should be dropped:

C# Copy Code
protected void HandleDrop(object sender, RadTreeNodeEventArgs e)
    {
        RadTreeNode sourceNode = e.SourceDragNode;
        RadTreeNode destNode = e.DestDragNode;
        RadTreeViewDropPosition dropPosition = e.DropPosition;

        
if (destNode != null)
        {
            
if (sourceNode.TreeView.SelectedNodes.Count <= 1)
            {
                PerformDragAndDrop(dropPosition, sourceNode, destNode);
            }
            
else if (sourceNode.TreeView.SelectedNodes.Count > 1)
            {
                
foreach (RadTreeNode node in sourceNode.TreeView.SelectedNodes)
                {
                    PerformDragAndDrop(dropPosition, node, destNode);
                }
            }

            destNode.Expanded = true;
            sourceNode.TreeView.ClearSelectedNodes();
        }
  }

private static void PerformDragAndDrop(RadTreeViewDropPosition dropPosition, RadTreeNode sourceNode, RadTreeNode destNode)
{
    
switch (dropPosition)
    {
        
case RadTreeViewDropPosition.Over:
            
// child
            
if (!sourceNode.IsAncestorOf(destNode))
            {
                sourceNode.Owner.Nodes.Remove(sourceNode);
                destNode.Nodes.Add(sourceNode);
            }
            
break;

        
case RadTreeViewDropPosition.Above:
            
// sibling - above
            
sourceNode.Owner.Nodes.Remove(sourceNode);
            destNode.InsertBefore(sourceNode);
            
break;

        
case RadTreeViewDropPosition.Below:
            
// sibling - below
            
sourceNode.Owner.Nodes.Remove(sourceNode);
            destNode.InsertAfter(sourceNode);
            
break;
    }
}
VB.NET Copy Code
Protected Sub HandleDrop(sender As Object, e As RadTreeNodeEventArgs)
   Dim sourceNode As RadTreeNode = e.SourceDragNode
   Dim destNode As RadTreeNode = e.DestDragNode
   Dim dropPosition As RadTreeViewDropPosition = e.DropPosition

   If Not (destNode Is Nothing) Then
      If sourceNode.TreeView.SelectedNodes.Count <= 1 Then
         PerformDragAndDrop(dropPosition, sourceNode, destNode)
      ElseIf sourceNode.TreeView.SelectedNodes.Count > 1 Then
         Dim node As RadTreeNode
         For Each node In sourceNode.TreeView.SelectedNodes
            PerformDragAndDrop(dropPosition, node, destNode)
         Next node
      End If

      destNode.Expanded = True
      sourceNode.TreeView.ClearSelectedNodes()
   End If
End Sub 'HandleDrop


Private Shared Sub PerformDragAndDrop(dropPosition As RadTreeViewDropPosition, sourceNode As RadTreeNode, destNode As RadTreeNode)
   Select Case dropPosition
      Case RadTreeViewDropPosition.Over
         ' child
         If Not sourceNode.IsAncestorOf(destNode) Then
            sourceNode.Owner.Nodes.Remove(sourceNode)
            destNode.Nodes.Add(sourceNode)
         End If

      Case RadTreeViewDropPosition.Above
         ' sibling - above
         sourceNode.Owner.Nodes.Remove(sourceNode)
         destNode.InsertBefore(sourceNode)

      Case RadTreeViewDropPosition.Below
         ' sibling - below
         sourceNode.Owner.Nodes.Remove(sourceNode)
         destNode.InsertAfter(sourceNode)
   End Select
End Sub 'PerformDragAndDrop

See live example at:
First Look

See Also