Completed
Last Updated: 15 Aug 2017 10:20 by ADMIN
To reproduce: please refer to the attached gif file.

Workaround: insteda of hiding the expander by the ShowExpandCollapse property use the NodeFormatting event as follows:

private void radTreeView1_NodeFormatting(object sender, TreeNodeFormattingEventArgs e)
        {
            e.NodeElement.ExpanderElement.Visibility = ElementVisibility.Collapsed;
        }
Completed
Last Updated: 09 Feb 2017 11:29 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 2
Category: TreeView
Type: Bug Report
1
To reproduce:

this.radTreeView1.TriStateMode = true;

RadTreeNode sitesNode = radTreeView1.Nodes.Add("Sites", "Sites", "");
sitesNode.Expanded = true;

RadTreeNode siteNode = new RadTreeNode("A site");
sitesNode.Nodes.Add(siteNode);

RadTreeNode eNode = new RadTreeNode("Event Types");
siteNode.Nodes.Add(eNode);
siteNode.Expanded = true;
RadTreeNode dummy = new RadTreeNode("dummy");
eNode.Nodes.Add(dummy);
dummy.CheckState = ToggleState.On;

RadTreeNode dummy2 = new RadTreeNode("dummy2");
eNode.Nodes.Add(dummy2);
dummy2.CheckState = ToggleState.Off;

Please refer to the attached screenshot. 

Workaround: change the CheckState property after all nodes are added to RadTreeView.

this.radTreeView1.TriStateMode = true;

RadTreeNode sitesNode = radTreeView1.Nodes.Add("Sites", "Sites", "");
sitesNode.Expanded = true;

RadTreeNode siteNode = new RadTreeNode("A site");
sitesNode.Nodes.Add(siteNode);

RadTreeNode eNode = new RadTreeNode("Event Types");
siteNode.Nodes.Add(eNode);
siteNode.Expanded = true;
RadTreeNode dummy = new RadTreeNode("dummy");
eNode.Nodes.Add(dummy);


RadTreeNode dummy2 = new RadTreeNode("dummy2");
eNode.Nodes.Add(dummy2);

dummy2.CheckState = ToggleState.Off; 
dummy.CheckState = ToggleState.On;
Completed
Last Updated: 04 Jan 2017 14:34 by ADMIN
To reproduce: 

Add a RadTreeView and a RadBreadCrumb and two RadButtons on the form and populate the tree view with data. Use the following code snippet:

private void radButton1_Click(object sender, EventArgs e)
{
    this.radBreadCrumb1.DefaultTreeView = null;
}

Random rand = new Random();

private void radButton2_Click(object sender, EventArgs e)
{
    this.radTreeView1.DataSource = null;
    DataTable dt = new DataTable();
    dt.Columns.Add("Id");
    dt.Columns.Add("Name");
    for (int i = 0; i < 10; i++)
    {
        dt.Rows.Add(rand.Next(0, 20), "Node" + i);
    }
    this.radTreeView1.DataSource = dt;
    this.radTreeView1.DisplayMember = "Name";
    this.radTreeView1.ValueMember = "Id";

    this.radBreadCrumb1.DefaultTreeView = this.radTreeView1;
}

Select some node in RadTreeView, the RadBreadCrum is updated respectively. Then click the first button to detach RadTreeView from RadBreadCrumb. Click the second button to populate RadTreeView with new data and associated the RadBreadCrumb with RadTreeView again. As a result you will notice that the last selected node will be loaded.

Workaround: clear the selection in RadTreeView before associating the RadBreadCrumb with RadTreeView:

this.radTreeView1.ClearSelection();
this.radBreadCrumb1.DefaultTreeView = this.radTreeView1;
Completed
Last Updated: 08 Apr 2016 11:27 by ADMIN
Error: "Object of type 'Telerik.WinControls.Enumerations.ToggleState' cannot be converted to type 'System.Boolean'."

To reproduce:

public Form1()
{
    InitializeComponent();

    List<Parent> dataItems = new List<Parent>();
    Parent currentParent;
    Child currentChild;
    List<Child> children;
    string parentId = string.Empty;
    string childId = string.Empty;
    for (int i = 1; i <= 5; i++)
    {
        parentId = Guid.NewGuid().ToString();

        children = new List<Child>();
        for (int j = 1; j < 5; j++)
        {
            childId = Guid.NewGuid().ToString();
            currentChild = new Child(childId, parentId, "SubNode." + i + "." + j, j % 2 == 0);
            children.Add(currentChild);
        }
        currentParent = new Parent(parentId, "Node." + i, i % 2 == 0,children);
        dataItems.Add(currentParent);
    }

    radTreeView1.DataSource = dataItems;
    radTreeView1.DisplayMember = "Title\\Name";
    radTreeView1.ChildMember = "Parent\\Children";
    radTreeView1.CheckedMember = "IsActive\\Status";
    radTreeView1.CheckBoxes = true;
}

public class Parent 
{
    public string ParentId { get; set; }

    public string Title { get; set; }

    public bool IsActive { get; set; }

    public List<Child> Children { get; set; }

    public Parent(string parentId, string title, bool isActive, List<Child> children)
    {
        this.ParentId = parentId;
        this.Title = title;
        this.IsActive = isActive;
        this.Children = children;
    }
}

public class Child
{
    public string ChildId { get; set; }

    public string ParentId { get; set; }

    public string Name { get; set; }

    public bool Status { get; set; }

    public Child(string childId, string parentId, string name, bool status)
    {
        this.ChildId = childId;
        this.ParentId = parentId;
        this.Name = name;
        this.Status = status;
    }
}

Workaround: Use a custom TypeConverter for the boolean properties:

public class ToggleStateConverter : TypeConverter
{
    public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
    {
        return destinationType == typeof(ToggleState);
    }

    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        if (value is bool)
        {
            switch ((bool)value)
            {
                case true:
                    return ToggleState.On;
                case false:
                    return ToggleState.Off;
                default :
                    return ToggleState.Indeterminate;
            }
        }
        return base.ConvertTo(context, culture, value, destinationType);
    }

    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        return sourceType == typeof(ToggleState);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        ToggleState state = (ToggleState)value;

        switch (state)
        {
            case ToggleState.On:
                return true;
            case ToggleState.Off:
                return false;
            case ToggleState.Indeterminate:
                return false;
        }

        return base.ConvertFrom(context, culture, value);
    }
}
Completed
Last Updated: 08 Apr 2016 10:26 by ADMIN
To reproduce: use the following code:

public Form1()
{
    InitializeComponent();

    this.radTreeView1.MultiSelect = true;
    for (int i = 0; i < 3; i++)
    {
        RadTreeNode node = new RadTreeNode();
        node.Text = "Node." + i;
        for (int j = 0; j < 3; j++)
        {
            node.Nodes.Add(new RadTreeNode("Node." + i + "." + j));
        }
        this.radTreeView1.Nodes.Add(node);
    }
    this.radTreeView1.SelectedNodeChanged += radTreeView1_SelectedNodeChanged;
}

private void radTreeView1_SelectedNodeChanged(object sender, Telerik.WinControls.UI.RadTreeViewEventArgs e)
{
    Console.WriteLine(e.Node.Text + ">> Selected: " + e.Node.Selected);
}

1.Select a node
2.Press Ctrl and click over the selected node again in order to unselect it. The SelectedNodeChanged event will not fire.

Workaround:

public class MyRadTreeNode : RadTreeNode
{
    public MyRadTreeNode(string text) : base(text)
    {
    }
    
    private static readonly MethodInfo OnSelectedNodeChangedMethodInfo =
        typeof(RadTreeViewElement).GetMethod("OnSelectedNodeChanged",
            BindingFlags.NonPublic | BindingFlags.Instance, null,
            new Type[] { typeof(RadTreeNode), typeof(RadTreeViewAction) }, null);

    protected override void OnNotifyPropertyChanged(PropertyChangedEventArgs args)
    {
        base.OnNotifyPropertyChanged(args);

        if (args.PropertyName == "Selected" && TreeViewElement != null)
        {
            OnSelectedNodeChangedMethodInfo.Invoke(TreeViewElement, new object[] { this, RadTreeViewAction.ByMouse });
        }
    }
}

Completed
Last Updated: 11 Oct 2023 10:09 by ADMIN
Release R3 2023
Completed
Last Updated: 12 Sep 2015 06:03 by ADMIN
Workaround:

After updating the binding source reset the data source of the tree

this.radTreeView.DataSource = null;

this.radTreeView.DataSource = this.MyBindingSource;
Unplanned
Last Updated: 15 Aug 2017 10:02 by ADMIN
ADMIN
Created by: Ralitsa
Comments: 0
Category: TreeView
Type: Feature Request
1

			
Completed
Last Updated: 30 Nov 2016 07:35 by ADMIN
Steps to reproduce: 
1. Add RadTreeView with few items 
2. Apply custom filtering 
3. In order to remove the custom filtering and return the default filtering, set the FilterPredicate to null. 
As a result, it is thrown an exception. 

Workaround: 
1. Save the default filter predicate before applying the custom filtering 
2. Clear filter descriptors and set the FilterPredicate property to stored default filter predicate

In the attachments can be found a sample application demonstrating the issue and the workaround 
Completed
Last Updated: 23 May 2019 13:19 by ADMIN
Release R2 2019 SP1 (LIB 2019.2.527)
To reproduce:
- Open the Property builder, add some nodes and disable them.
- There is no way to enable them at design time. 

Workaround. 
Disable the nodes at runtime.
Completed
Last Updated: 05 May 2016 09:25 by ADMIN
To reproduce:

private void Form1_Load(object sender, EventArgs e)
{ 
    this.radTreeView1.Nodes.Add("Node1");
    this.radTreeView1.Nodes.Add("Node2");
    this.radTreeView1.Nodes.Add("Node3");
    this.radTreeView1.Nodes.Add("Node4");
    this.radTreeView1.Nodes.Add("Node5");
    this.radTreeView1.Nodes.Add("Node6");
    this.radTreeView1.Nodes["Node1"].Nodes.Add("Node11");
    this.radTreeView1.Nodes["Node1"].Nodes.Add("Node12");
    this.radTreeView1.Nodes["Node1"].Nodes.Add("Node13");
    this.radTreeView1.Nodes["Node1"].Nodes.Add("Node14");
    this.radTreeView1.Nodes["Node2"].Nodes.Add("Node21");
    this.radTreeView1.Nodes["Node2"].Nodes.Add("Node22");
    this.radTreeView1.Nodes["Node2"].Nodes.Add("Node23");
    this.radTreeView1.Nodes["Node2"].Nodes.Add("Node24");
    this.radTreeView1.Nodes["Node3"].Nodes.Add("Node31");
    this.radTreeView1.Nodes["Node3"].Nodes.Add("Node32");
    this.radTreeView1.Nodes["Node3"].Nodes.Add("Node33");
    this.radTreeView1.Nodes["Node3"].Nodes.Add("Node34");
    this.radTreeView1.Nodes["Node4"].Nodes.Add("Node41");
    this.radTreeView1.Nodes["Node4"].Nodes.Add("Node42");
    this.radTreeView1.Nodes["Node4"].Nodes.Add("Node43");
    this.radTreeView1.Nodes["Node4"].Nodes.Add("Node44");
    this.radTreeView1.Nodes["Node5"].Nodes.Add("Node51");
    this.radTreeView1.Nodes["Node5"].Nodes.Add("Node52");
    this.radTreeView1.Nodes["Node5"].Nodes.Add("Node53");
    this.radTreeView1.Nodes["Node5"].Nodes.Add("Node54");
    this.radTreeView1.Nodes["Node6"].Nodes.Add("Node61");
    this.radTreeView1.Nodes["Node6"].Nodes.Add("Node62");
    this.radTreeView1.Nodes["Node6"].Nodes.Add("Node63");
    this.radTreeView1.Nodes["Node6"].Nodes.Add("Node64");
}

Workaround: add the nodes in the form's constructor.

Second workaround:  Me.RadTreeView1.TreeViewElement.Update(Telerik.WinControls.UI.RadTreeViewElement.UpdateActions.Reset)
Unplanned
Last Updated: 16 Sep 2016 14:22 by ADMIN
Workaround:

raise a flag before the delete operation and cancel the SelectedNodeChanging event
Completed
Last Updated: 02 Feb 2018 15:36 by ADMIN
To reproduce:

DataTable dt = new DataTable();
 
public Form1()
{
    InitializeComponent();

    dt.Columns.Add("Id", typeof(int));
    dt.Columns.Add("ParentID", typeof(int));
    dt.Columns.Add("NodeName", typeof(string));
    dt.Rows.Add(1, 0, "Category1");
    dt.Rows.Add(2, 1, "Category2");
    dt.Rows.Add(3, 0, "Category3");
    dt.Rows.Add(4, 3, "Category4");
    dt.Rows.Add(5, 3, "Category5");
    dt.Rows.Add(6, 3, "Category6");
    dt.Rows.Add(7, 6, "Category7");
    dt.Rows.Add(8, 6, "Category8"); 

    this.radTreeView1.DataSource = dt; 

    this.radTreeView1.DisplayMember = "NodeName";
    this.radTreeView1.ChildMember = "ID";
    this.radTreeView1.ParentMember = "ParentID";

    this.radTreeView1.ExpandAll();

    this.radTreeView1.AllowAdd = true;
    this.radTreeView1.AllowRemove = true;
    this.radTreeView1.AllowDefaultContextMenu = true;

    this.radLabel1.Text = "Number of rows: " + dt.Rows.Count;
    
    this.radTreeView1.NodeRemoved += radTreeView1_NodeRemoved;
}

private void radTreeView1_NodeRemoved(object sender, Telerik.WinControls.UI.RadTreeViewEventArgs e)
{
    this.radLabel1.Text = "Number of rows: " + dt.Rows.Count;
}

Workaround: perform the delete operation programmatically by modifying the default context menu:

 this.radTreeView1.ContextMenuOpening += radTreeView1_ContextMenuOpening;

private void radTreeView1_ContextMenuOpening(object sender, TreeViewContextMenuOpeningEventArgs e)
{
    foreach (RadMenuItem item in e.Menu.Items)
    {
        if (item.Text == "&Delete")
        {
            item.Visibility = Telerik.WinControls.ElementVisibility.Collapsed;
        }
        else
        {
            item.Visibility = Telerik.WinControls.ElementVisibility.Visible;
        }
    }

    RadMenuItem removeItem = new RadMenuItem("Remove");
    e.Menu.Items.Add(removeItem);
    removeItem.Click += item_Click;
}

private void item_Click(object sender, EventArgs e)
{
    DeleteSubNodes(this.radTreeView1.SelectedNode);
    this.radLabel1.Text = "Number of rows: " + dt.Rows.Count;
}

private void DeleteSubNodes(Telerik.WinControls.UI.RadTreeNode node)
{
    if (node.Nodes.Count == 0)
    {
        dt.Rows.Remove(((DataRowView)node.DataBoundItem).Row);
    }
    else
    {
        foreach (RadTreeNode n in node.Nodes)
        {
            DeleteSubNodes(n);
        }
        dt.Rows.Remove(((DataRowView)node.DataBoundItem).Row);
    }
}
Completed
Last Updated: 09 Apr 2012 04:40 by Svetlin
Hide the AutoScroll property of RadTreeView in design time
Completed
Last Updated: 19 May 2012 06:39 by Svetlin
1. Set CheckBoxes property of RadTreeView to true.
2. Set TriStateMode property of RadTreeView to true.
3. Cancel the node checked state property of a node in the NodeCheckedChanging event
4. The parent node will not be in intermediate checked state.
Completed
Last Updated: 23 Apr 2014 12:56 by ADMIN
ADMIN
Created by: Martin Vasilev
Comments: 0
Category: TreeView
Type: Feature Request
1
Set separate indent for every node in RadTreeView. Currently we support setting the same indent for every node thorough TreeIndent property.
Completed
Last Updated: 05 Jun 2014 07:08 by Svetlin
Adding or removing node through BindingList API collapse all nodes in self-referencing hierarchy in RadTreeView.
Completed
Last Updated: 05 Jun 2014 07:08 by Svetlin
If you perform radTreeView.Nodes.Clear method and then load new nodes by using the LoadXML method, the drag and drop behavior is corrupted.
Completed
Last Updated: 20 Jan 2010 14:20 by ADMIN
ADMIN
Created by: Telerik Admin
Comments: 0
Category: TreeView
Type: Bug Report
1
DragEnding event is not fired in some cases.