Completed
Last Updated: 07 Sep 2016 15:12 by ADMIN
Start dragging a node and scroll using the mouse wheel. While scrolling, drop the node. 
Completed
Last Updated: 20 Feb 2014 15:26 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: TreeView
Type: Bug Report
0
To reproduce:
-add RadTreeView and RadButton:
-use the following code:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        List<Distributor> distributors = new List<Distributor>()
        {
            new Distributor(432,"Distributor 1"),
            new Distributor(454,"Distributor 2"),
            new Distributor(438,"Distributor 3"),
            new Distributor(455,"Distributor 4")
        };

        List<Distributor> distributors2 = new List<Distributor>()
        {
            new Distributor(486,"Distributor 5"),
            new Distributor(487,"Distributor 6"),
            new Distributor(498,"Distributor 7"),
            new Distributor(475,"Distributor 8")
        };

        List<Product> products = new List<Product>();
        products.Add(new Product(567, "Bicycle", 5, distributors));
        products.Add(new Product(456, "Car", 5000,distributors2));
        products.Add(new Product(789, "Bike", 1500,null));

        BindingList<Category> categories = new BindingList<Category>();
        categories.Add(new Category("Bikes", products));
        categories.Add(new Category("Accessories", null));
        categories.Add(new Category("Clothing", null));

        radTreeView1.DataSource = categories;
        if ((radTreeView1.DataSource as BindingList<Category>).Count > 0)
        {
            radTreeView1.DisplayMember = "Name\\Description\\Name";
            radTreeView1.ChildMember = "Categories\\Products\\Distributors";   
        }
        
    }

    private void radButton1_Click(object sender, EventArgs e)
    {
        BindingList<Category> categories = radTreeView1.DataSource as BindingList<Category>;
        categories.Clear();
    }
}

public class Distributor
{
    private int _id;
    private string _name;

    public Distributor(int id, string name)
        {
            this._id = id;
            this._name = name;
        }

    public int Id
        {
            get
            {
                return this._id;
            }
            set
            {
                this._id = value;
            }
        }

    public string Name
        {
            get
            {
                return this._name;
            }
            set
            {
                this._name = value;
            }
        }
}

public class Product
{
    private int _id;
    private string _description;
    private float _price;
    private List<Distributor> _distributors;

    public List<Distributor> Distributors
        {
            get
            {
                return this._distributors;
            }
            set
            {
                this._distributors = value;
            }
        }

    public int ID
        {
            get
            {
                return _id;
            }
            set
            {
                _id = value;
            }
        }

    public string Description
        {
            get
            {
                return _description;
            }
            set
            {
                _description = value;
            }
        }

    public float Price
        {
            get
            {
                return _price;
            }
            set
            {
                _price = value;
            }
        }

    public Product(int id, string description, float price, List<Distributor> distributors)
    {
        _id = id;
        _description = description;
        _price = price;
        _distributors = distributors;
    }
}

public class Category
{
    public Category(string name, List<Product> products)
    {
        _name = name;
        _products = products;
    }

    private List<Product> _products;
    private string _name;

    public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                _name = value;
            }
        }

    public List<Product> Products
        {
            get
            {
                return _products;
            }
            set
            {
                _products = value;
            }
        }
}

When you click the button, ArgumentOutOfRangeException is thrown.

Workaround: instead of clearing the BindingList, remove each list item one by one:
while (categories.Count>0)
{
    categories.RemoveAt(0);
}
Completed
Last Updated: 20 Feb 2014 15:27 by ADMIN
Workaround:
Instead of {RadTreeNode}.Nodes.Clear(), use 

 while ({RadTreeNode}.Nodes.Count>0)
          {
              {RadTreeNode}.Nodes.RemoveAt(0);
          }
Completed
Last Updated: 20 Mar 2014 11:23 by ADMIN
To reproduce:
- Add a RadTreeView which have parent and child nodes to a form.
- Expand nodes until the both scrollbars are simultaneously shown.
- You will notice that you cannot scroll to the last item.

Workaround:
- Subscribe to the following ScrollerUpdated event handler:

void Scroller_ScrollerUpdated(object sender, EventArgs e)
{
radTreeView1.TreeViewElement.InvalidateMeasure();

}

- You can subscribe to this event with the following line of code:
radTreeView1.TreeViewElement.Scroller.ScrollerUpdated += Scroller_ScrollerUpdated;
Completed
Last Updated: 12 Mar 2014 09:48 by ADMIN
To reproduce: 
Add a RadTreeView to a form and use the following code:
private List<EntityA> entities = new List<EntityA>(); public Form1() { InitializeComponent(); radTreeView1.TriStateMode = true; entities = new List<EntityA>(); for (int i = 0; i < 10; i++) { var newEntityI = new EntityA(i.ToString()); for (int j = 0; j < 100; j++) { var newEntityJ = new EntityB(j.ToString()); for (int k = 0; k < 1000; k++) { var newEntityK = new EntityC(k.ToString()); newEntityJ.Entities.Add(newEntityK); } newEntityI.Entities.Add(newEntityJ); } entities.Add(newEntityI); } } private void checkBox1_CheckedChanged(object sender, EventArgs e) { foreach (var node in radTreeView1.Nodes) { node.Checked = checkBox1.Checked; } } private void radTreeView1_NodesNeeded(object sender, NodesNeededEventArgs e) { if (e.Parent == null) { foreach (var entity in entities) { e.Nodes.Add(new RadTreeNode(entity.Name, false) { CheckState = ToggleState.Off, Tag = entity }); } } else if (e.Parent.Tag is EntityA) { var currentEntity = e.Parent.Tag as EntityA; foreach (var entity in currentEntity.Entities) { e.Nodes.Add(new RadTreeNode(entity.Name, false) { CheckState = e.Parent.CheckState, Tag = entity }); } } else if (e.Parent.Tag is EntityB) { var currentEntity = e.Parent.Tag as EntityB; foreach (var entity in currentEntity.Entities) { e.Nodes.Add(new RadTreeNode(entity.Name, false) { CheckState = e.Parent.CheckState, Tag = entity }); } } else if (e.Parent.Tag is EntityC) { } } 
Put a breakpoint in the last If statement, you will notice that the breakpoint is being hit, while it is not if the TrieStateMode is set to false 

Workaround: 
Use the following custom RadTreeNode: 
public class MyTreeNode : RadTreeNode { private FieldInfo triStateField; public MyTreeNode() : base() { } public MyTreeNode(string text) : base(text) { } public MyTreeNode(string text, RadTreeNode[] children) : base(text, children) { } public MyTreeNode(string text, bool expanded) : base(text, expanded) { } public MyTreeNode(string text, Image image) : base(text, image) { } public MyTreeNode(string text, Image image, bool expanded) : base(text, image, expanded) { } public override ToggleState CheckState { get { return base.CheckState; } set { bool set = false; if (this.TreeViewElement != null && this.TreeViewElement.TriStateMode) { if (this.triStateField == null) { this.triStateField = typeof(RadTreeViewElement).GetField("triStateMode", BindingFlags.Instance | BindingFlags.NonPublic); } triStateField.SetValue(this.TreeViewElement, false); set = true; } base.CheckState = value; if (set) { this.triStateField.SetValue(this.TreeViewElement, true); } } } }

Completed
Last Updated: 31 Mar 2014 10:27 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: TreeView
Type: Feature Request
0
Add e.Action in SelectedNodeChanging similar to the one in the standard TreeView.BeforeSelect event which indicates what caused the event - mouse click, key pressed, or other
Completed
Last Updated: 05 Mar 2014 08:33 by ADMIN
ADMIN
Created by: Georgi I. Georgiev
Comments: 0
Category: TreeView
Type: Bug Report
0
To reproduce: Add a RadTreeView with hierarchical data. Select a node with hierarchy level > 0. Call the Clear method of the Nodes collection. Refill the tree, drag and drop a node, you will see that two nodes will be dropped since the previous node's Selected property is set to true. 

Workaround: private void DetachAllNodes(RadTreeNode parent) { this.CleanNode(parent); foreach (RadTreeNode node in parent.Nodes) { this.DetachAllNodes(node); } } private void CleanNode(RadTreeNode node) { node.Current = false; node.Selected = false; } foreach (RadTreeNode node in tree.Nodes) { this.DetachAllNodes(node); } tree.Nodes.Clear();
Completed
Last Updated: 05 Nov 2013 02:31 by ADMIN
Workaround:
this.radTreeView1.SelectedNode = null;
Completed
Last Updated: 22 Oct 2013 11:54 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 0
Category: TreeView
Type: Bug Report
0
To reproduce: this issue is reproducible under Windows8 OS only
-add RadTreeView from the Toolbox to the Form and add several tree nodes at design time;
-add RadContextMenu from the Toolbox and add several items at design time;
Use the following code:
public Form1()
{
    InitializeComponent();

    this.radTreeView1.RadContextMenu = this.radContextMenu1;
}
-run the application;
-select a tree node;
-right mouse click over the node to show the context menu; As a result the main form looses focus and you are unable to click anywhere outside the RadTreeView.
This issue is inconstant and it is not appearing every time.

Workaround: use ContextMenu property instead:
public Form1()
{
    InitializeComponent();

    ContextMenu menu = new ContextMenu();

    foreach (var item in radContextMenu1.Items)
    {
        menu.MenuItems.Add(new MenuItem(item.Text));
    }

    this.radTreeView1.ContextMenu = menu;
    // this.radTreeView1.RadContextMenu = this.radContextMenu1;
}
Completed
Last Updated: 17 Oct 2013 03:34 by ADMIN
ADMIN
Created by: Georgi I. Georgiev
Comments: 0
Category: TreeView
Type: Bug Report
1
To reproduce:
Add a RadTreeView with some nodes and you will notice that the font is different than other controls.

Workaround:
void tree_NodeFormatting(object sender, TreeNodeFormattingEventArgs e)
{
    e.NodeElement.ContentElement.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault;
}
Completed
Last Updated: 11 Apr 2016 07:44 by ADMIN
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);
    }
}
Completed
Last Updated: 20 Nov 2017 12:18 by ADMIN
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; }
Completed
Last Updated: 28 Oct 2013 16:09 by Jesse Dyck
ADMIN
Created by: Georgi I. Georgiev
Comments: 1
Category: TreeView
Type: Bug Report
3
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();
Completed
Last Updated: 05 Jun 2014 07:07 by ADMIN
ADMIN
Created by: Peter
Comments: 0
Category: TreeView
Type: Bug Report
0
TreeViewDragDropService cannot be canceled on the following event:

radTreeView1.TreeViewElement.DragDropService.PreviewDragOver
Completed
Last Updated: 09 May 2013 10:18 by ADMIN
When a tree is bound using object-relational binding the editing does not work for nodes that are on level higher than the first.
Completed
Last Updated: 13 Feb 2014 13:18 by ADMIN
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); }
Completed
Last Updated: 19 Jun 2014 12:54 by ADMIN
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);
    }
Completed
Last Updated: 15 Feb 2021 10:35 by ADMIN
Release R1 2021 SP2
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).
Completed
Last Updated: 13 Feb 2014 13:20 by ADMIN
Workaround:
RadTreeView1.TreeViewElement.TreeNodeProvider.Reset()
Completed
Last Updated: 05 Aug 2014 13:13 by ADMIN
I can type to select a node.  For example, if I click to select the Car node, then type "V", selection jumps to the "Van" node.  I can right-arrow to expand, then type "U" to select the "Useful" node.

Resolution: 
Added two new properties: KeyboardSearchEnabled and KeyboardSearchResetInterval. When set the KeyboardSearchEnabled property to true, user can navigate to an item by typing when RadTreeView is focused. You can set how long the user must wait before searching with the keyboard is reset using the KeyboardSearchResetInterval property.