To reproduce: Add a RadTreeView ,add nodes, enable TriState, disable AutoCheckChildNodes and use this code: void cxTreeView2_NodeCheckedChanging(object sender, RadTreeViewCancelEventArgs e) { if (!cxTreeView2.AutoCheckChildNodes && cxTreeView2.CheckBoxes && cxTreeView2.TriStateMode) { cxTreeView2.TreeViewElement.NodeCheckedChanging -= cxTreeView2_NodeCheckedChanging; if (e.Node.CheckState == ToggleState.Indeterminate) { e.Cancel = true; e.Node.CheckState = ToggleState.On; CheckAllChildren(e.Node); } cxTreeView2.TreeViewElement.NodeCheckedChanging += cxTreeView2_NodeCheckedChanging; } } void CheckAllChildren(RadTreeNode parent) { foreach (var node in parent.Nodes) { node.CheckState = ToggleState.On; CheckAllChildren(node); } } Click a top node two times and remove the mouse from the checkbox, it is now showing as Indetermined but the data item is on. Workaround: void cxTreeView2_NodeCheckedChanging(object sender, RadTreeViewCancelEventArgs e) { if (!cxTreeView2.AutoCheckChildNodes && cxTreeView2.CheckBoxes && cxTreeView2.TriStateMode) { cxTreeView2.TreeViewElement.NodeCheckedChanging -= cxTreeView2_NodeCheckedChanging; if (e.Node.CheckState == ToggleState.Indeterminate) { e.Cancel = true; e.Node.CheckState = ToggleState.On; CheckAllChildren(e.Node); cxTreeView2.TreeViewElement.Update(RadTreeViewElement.UpdateActions.Reset); } cxTreeView2.TreeViewElement.NodeCheckedChanging += cxTreeView2_NodeCheckedChanging; } } void CheckAllChildren(RadTreeNode parent) { foreach (var node in parent.Nodes) { node.CheckState = ToggleState.On; CheckAllChildren(node); } }
To reproduce: - add a RadTreeView - enable multiselect - select at least 1 node - call radTreeView1.SelectedNodes.Clear() Workaround: Clear the nodes manually: foreach (var node in this.radTreeView1.SelectedNodes.ToList()) { node.Selected = false; }
To reproduce: private void btnFill_Click(object sender, EventArgs e) { radTreeView.BeginUpdate(); radTreeView.Nodes.Add(new RadTreeNode("root 1")); radTreeView.Nodes.Add(new RadTreeNode("root 2")); radTreeView.Nodes.Add(new RadTreeNode("root 3")); radTreeView.Nodes.Add(new RadTreeNode("root 4")); radTreeView.Nodes[radTreeView.Nodes.Count - 1].Expand(); for (int i = 0; i < 30; i++) { radTreeView.Nodes[radTreeView.Nodes.Count - 1].Nodes.Add(new RadTreeNode("text" +i)); } radTreeView.EndUpdate(); } private void radButton1_Click(object sender, EventArgs e) { radTreeView.BeginUpdate(); foreach (var node in radTreeView.Nodes[radTreeView.Nodes.Count - 1].Nodes.ToArray()) { node.Remove(); } for (int i = 0; i < 99; i++) { radTreeView.Nodes[radTreeView.Nodes.Count - 1].Nodes.Add(new RadTreeNode("aasdasd")); } radTreeView.EndUpdate(); } Workaround - reset the traverser and update the scroll value prior removing the nodes radTreeView.TreeViewElement.Scroller.Traverser.Reset(); this.treeView.TreeViewElement.Scroller.UpdateScrollValue();
TreeViewDragDropService cannot be canceled on the following event: radTreeView1.TreeViewElement.DragDropService.PreviewDragOver
When a tree is bound using object-relational binding the editing does not work for nodes that are on level higher than the first.
To reproduce: Add some nodes to a tree, and then clear them and move them to another tree. The inner nodes expand/collapse does not work correctly: void radButton1_Click(object sender, EventArgs e) { tree1.Nodes.Clear(); tree2.Nodes.AddRange(nodes); } RadTreeView tree1 = new RadTreeView(); RadTreeView tree2 = new RadTreeView(); List<RadTreeNode> nodes = new List<RadTreeNode>(); private void Populate(RadTreeView tree) { RadTreeNode n11 = new RadTreeNode("11"); RadTreeNode n12 = new RadTreeNode("12"); RadTreeNode n13 = new RadTreeNode("13"); RadTreeNode n14 = new RadTreeNode("14"); nodes.Add(n11); nodes.Add(n12); nodes.Add(n13); nodes.Add(n14); RadTreeNode n21 = new RadTreeNode("21"); RadTreeNode n22 = new RadTreeNode("22"); RadTreeNode n23 = new RadTreeNode("23"); RadTreeNode n24 = new RadTreeNode("24"); n11.Nodes.Add(n21); n11.Nodes.Add(n22); n11.Nodes.Add(n23); n11.Nodes.Add(n24); RadTreeNode n31 = new RadTreeNode("31"); RadTreeNode n32 = new RadTreeNode("32"); RadTreeNode n33 = new RadTreeNode("33"); RadTreeNode n34 = new RadTreeNode("34"); n21.Nodes.Add(n31); n21.Nodes.Add(n32); n21.Nodes.Add(n33); n21.Nodes.Add(n34); tree.Nodes.AddRange(nodes); } 1. Run 2. Expand all nodes in tree1 3. Select node 23 4. Press button move right 5. Click at "plus" at node 21. -> expand collapse does not work correctly Workaround - instead of calling the Clear method of the Nodes collection, remove them manually: while (tree1.Nodes.Count > 0) { tree1.Nodes.RemoveAt(0); }
RadTreeView - Traverser throws exception if you clear and recreate all sub nodes of some node. Steps to reproduce: 1. Create RadTreeView with one node. 2. Add 100 sub nodes. 3. Clear the sub nodes. 4. Move scroll. WorkAround: private void RefreshNodes() { radTreeView1.BeginUpdate(); this.radTreeView1.TreeViewElement.Scroller.Traverser.Position = groupNode; this.radTreeView1.TreeViewElement.Scroller.Traverser.Reset(); this.radTreeView1.SelectedNodes.Clear(); groupNode.Nodes.Clear(); AddNodes(groupNode.Nodes, 1, 100); groupNode.Expand(); radTreeView1.EndUpdate(); this.radTreeView1.TreeViewElement.Update(RadTreeViewElement.UpdateActions.Reset); }
If you have a node with a very long text that requires horizontal scrollbar and at the same time you have a many nodes which requires a vertical scrollbar in some border cases the long text of the node is cut off (with ellipsis).
Workaround: RadTreeView1.TreeViewElement.TreeNodeProvider.Reset()
NullReferenceException in the UpdateLines method somehow triggered by the OnProcessMouseUp handler, when I'm trying to perform a drag and drop move in my treeview, that is fully managed by an inner model. The DnD events are bound and trigger delete + add actions in the tree.
The issue is valid for Windows 7 and Windows 8 based devices and related to accessibility objects support in our suite
The RadTreeView does not reset the SelectedNode when the nodes are cleared in unbound mode.
FIX. RadTreeView - CreateNode event is not fired when adding a node from the New menu item in the context menu Workaround: Use the NodeAdding/NodeAdded events.
Unable to add a Node when RadTreeView is sorted - Please, refer to QSF->PivotGrid->Settings example and click twice on the Product filter to open the filter dialog.
Adding or removing node through BindingList API collapse all nodes in self-referencing hierarchy in RadTreeView.
NullReferenceException is thrown, when end edit performs in RadTreeView. To reproduce the issue: 1. Bind the grid to table 2. Add new record programmatically 3. Call BeginEdit of the added node 4. Edit the text of the node from the editor 5. Press ENTER 6. Exception is thrown.
To reproduce: - populate a tree with some nodes in different levels - set the ShowLines to true - select a node on the second level - clear the nodes on a button click => exception is thrown WORKAROUND: radTreeView1.ShowLines = false; radTreeView1.Nodes.Clear(); radTreeView1.ShowLines = true;
Step to reproduce: radTreeView1.Nodes["Random Node"].Enabled = false; WORKAROUND: public partial class Form1 : Form { public Form1() { InitializeComponent(); radTreeView1.CreateNodeElement += radTreeView1_CreateNodeElement; } void radTreeView1_CreateNodeElement(object sender, Telerik.WinControls.UI.CreateTreeNodeElementEventArgs e) { e.NodeElement = new MyTreeNodeElement(); } } public class MyTreeNodeElement : TreeNodeElement { protected override Type ThemeEffectiveType { get { return typeof(TreeNodeElement); } } protected override void InitializeFields() { base.InitializeFields(); this.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; } }
Steps to reproduce: public partial class Form3 : Form { private RadTreeView treeView = new RadTreeView(); private BindingSource bindingSource = new BindingSource(); private BindingSource bindingSource2 = new BindingSource();
bind the tree and try to add a node to the control - error occurs