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
Private Shared Sub PerformDragAndDrop(dropPosition As RadTreeViewDropPosition, sourceNode As RadTreeNode, destNode As RadTreeNode) Select Case dropPosition Case RadTreeViewDropPosition.Over If Not sourceNode.IsAncestorOf(destNode) Then sourceNode.Owner.Nodes.Remove(sourceNode) destNode.Nodes.Add(sourceNode) End If
Case RadTreeViewDropPosition.Above sourceNode.Owner.Nodes.Remove(sourceNode) destNode.InsertBefore(sourceNode)
Case RadTreeViewDropPosition.Below sourceNode.Owner.Nodes.Remove(sourceNode) destNode.InsertAfter(sourceNode) End Select End Sub |
See live example at:
First Look
See Also