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 indicating whether a node is being moved or copied.
Example:
| ASPX |
Copy Code |
|
<script type="text/javascript"> function SaveCtrlState(sourceNode, destNode, eventArgs) { var hidden = document.getElementById("<%= CtrlKeyField.ClientID %>");
if (eventArgs.ctrlKey) { hidden.value = "True"; } else { hidden.value = "False"; } } </script> ... <rad:RadTreeView ID="RadTreeView1" runat="server" DragAndDrop="True" BeforeClientDrop="SaveCtrlState" OnNodeDrop="HandleDrop" ContentFile="tree.xml"> </rad:RadTreeView> ... <rad:RadTreeView ID="RadTreeView2" runat="server" DragAndDrop="True" ContentFile="tree.xml"> </rad:RadTreeView> ... <asp:HiddenField ID="CtrlKeyField" runat="server" Value="False"/> |
| C# |
Copy Code |
|
protected void Page_Load(object sender, EventArgs e) { if (CtrlKeyField.Value == "False") { remove = false; } else { remove = true; } }
protected void HandleDrop(object sender, RadTreeNodeEventArgs 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; }
// clone the sourceNode RadTreeNode sourceNodeClone = CloneNode(sourceNode);
if (remove == false) { sourceNode.Owner.Nodes.Remove(sourceNode); }
// add source node as a child of the destination node 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.ImageExpandedUrl = sourceNode.ImageExpandedUrl;
return clonedNode;
} |
| VB.NET |
Copy Code |
|
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 RadTreeNodeEventArgs) Dim sourceNode As RadTreeNode = e.SourceDragNode Dim destNode As RadTreeNode = e.DestDragNode If (Not (destNode) Is 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 RadTreeNode = New RadTreeNode clonedNode.Text = sourceNode.Text clonedNode.Value = sourceNode.Value clonedNode.ImageUrl = sourceNode.ImageUrl clonedNode.ImageExpandedUrl = sourceNode.ImageExpandedUrl Return clonedNode End Function
|