New to Telerik UI for ASP.NET AJAX? Start a free 30-day trial
To copy nodes from one TreeView to another, you should make a clone of the dragged TreeNode (sourceNode) and add it to the Nodes collection of the other TreeView . An example is shown below. A hidden field is used to indicate whether a node is being moved or copied.
ASPNET JavaScript C# VB.NET
< telerik: RadTreeView RenderMode = " Lightweight" ID = " RadTreeView1" runat = " server" EnableDragAndDrop = " True" OnClientNodeDropping = " SaveCtrlState"
OnNodeDrop = " HandleDrop" >
</ telerik: RadTreeView>
...
< telerik: RadTreeView RenderMode = " Lightweight" ID = " RadTreeView2" runat = " server" EnableDragAndDrop = " True" >
</ telerik: RadTreeView>
...
< asp: HiddenField ID = " CtrlKeyField" runat = " server" Value = " False" />
function SaveCtrlState ( sender, eventArgs ) {
var hidden = document . getElementById ( "<%= CtrlKeyField.ClientID %>" ) ;
if ( eventArgs. get_domEvent ( ) . ctrlKey ) {
hidden. value = "True" ;
}
else {
hidden. value = "False" ;
}
}
private bool remove ;
protected void Page_Load ( object sender, EventArgs e)
{
if ( CtrlKeyField. Value == "False" )
{
remove = false ;
}
else
{
remove = true ;
}
}
protected void HandleDrop ( object sender, RadTreeNodeDragDropEventArgs e)
{
RadTreeNode sourceNode = e. SourceDragNode;
RadTreeNode destNode = e. DestDragNode;
if ( destNode != null )
{
if ( sourceNode. TreeView. SelectedNodes. Count <= 1 )
{
PerformDragAndDrop ( sourceNode, destNode) ;
}
else if ( sourceNode. TreeView. SelectedNodes. Count > 1 )
{
foreach ( RadTreeNode currentNode in sourceNode. TreeView. SelectedNodes)
{
PerformDragAndDrop ( currentNode, destNode) ;
}
}
destNode. Expanded = true ;
}
}
private void PerformDragAndDrop ( RadTreeNode sourceNode, RadTreeNode destNode)
{
if ( sourceNode. Equals ( destNode) || sourceNode. IsAncestorOf ( destNode) )
{
return ;
}
RadTreeNode sourceNodeClone = CloneNode ( sourceNode) ;
if ( remove == false )
{
sourceNode. Owner. Nodes. Remove ( sourceNode) ;
}
if ( ! sourceNode. IsAncestorOf ( destNode) )
{
destNode. Nodes. Add ( sourceNodeClone) ;
}
}
private RadTreeNode CloneNode ( RadTreeNode sourceNode)
{
RadTreeNode clonedNode = new RadTreeNode ( ) ;
clonedNode. Text = sourceNode. Text;
clonedNode. Value = sourceNode. Value;
clonedNode. ImageUrl = sourceNode. ImageUrl;
clonedNode. ExpandedImageUrl = sourceNode. ExpandedImageUrl;
return clonedNode;
}
Private remove As Boolean
Protected Sub Page_Load( ByVal sender As Object , ByVal e As EventArgs)
If CtrlKeyField.Value = "False" Then
remove = False
Else
remove = True
End If
End Sub
Protected Sub HandleDrop( ByVal sender As Object , ByVal e As RadTreeNodeDragDropEventArgs)
Dim sourceNode As RadTreeNode = e.SourceDragNode
Dim destNode As RadTreeNode = e.DestDragNode
If destNode <> Nothing Then
If sourceNode.TreeView.SelectedNodes.Count <= 1 Then
PerformDragAndDrop( sourceNode, destNode)
ElseIf sourceNode.TreeView.SelectedNodes.Count > 1 Then
For Each currentNode As RadTreeNode In sourceNode.TreeView.SelectedNodes
PerformDragAndDrop( currentNode, destNode)
Next
End If
destNode.Expanded = True
End If
End Sub
Private Sub PerformDragAndDrop( ByVal sourceNode As RadTreeNode, ByVal destNode As RadTreeNode)
If sourceNode.Equals( destNode) OrElse sourceNode.IsAncestorOf( destNode) Then
Return
End If
Dim sourceNodeClone As RadTreeNode = CloneNode( sourceNode)
If remove = False Then
sourceNode.Owner.Nodes.Remove( sourceNode)
End If
If Not sourceNode.IsAncestorOf( destNode) Then
destNode.Nodes.Add( sourceNodeClone)
End If
End Sub
Private Function CloneNode( ByVal sourceNode As RadTreeNode) As RadTreeNode
Dim clonedNode As New RadTreeNode( )
clonedNode.Text = sourceNode.Text
clonedNode.Value = sourceNode.Value
clonedNode.ImageUrl = sourceNode.ImageUrl
clonedNode.ExpandedImageUrl = sourceNode.ExpandedImageUrl
Return clonedNode
End Function