This is a migrated thread and some comments may be shown as answers.

Q1 2011 breaking changes

3 Answers 134 Views
Treeview
This is a migrated thread and some comments may be shown as answers.
Zensell
Top achievements
Rank 1
Zensell asked on 17 Mar 2011, 04:44 PM
Hi, how should I fix these breaking changes?

- CompareNodesTagCommand has been removed.
- RadTreeNodeCollection.Find has been removed.
- RadTreeNode.DataBoundItem is read-only. Is there a way to change it manually in unbound mode?
- TreeNodeUI has been removed.

Thanks.

3 Answers, 1 is accepted

Sort by
0
Accepted
Julian Benkov
Telerik team
answered on 22 Mar 2011, 10:53 AM
Hello Zensell,

1) You can use new Find method of RadTreeView control for this behavior. Here is a small example:

private object tagKey;
private bool FindByTag(RadTreeNode node)
{
    if (node.Tag != null)
    {
        IComparable comparer = node.Tag as IComparable;
        if ((comparer != null && comparer.CompareTo(tagKey) == 0) ||
            node.Tag.Equals(key))
        {
            return true;
        }
    }
 
    return false;
}
 
 
private void radButton1_Click(object sender, EventArgs e)
{
    RadTreeNode nodeByTag = this.radTreeView1.Find(this.FindByTag);
}

If you want to use the old Command aproach here is implementation of removed CompareNodesTagCommand command:
public class CompareNodesTagCommand : CommandBase
{
    public override object Execute(params object[] settings)
    {
        if (settings.Length > 1 &&
            this.CanExecute(settings[0]))
        {
            RadTreeNode node = settings[0] as RadTreeNode;
            object key = (settings[1] as IList)[0];
 
            if (node != null && node.Tag != null)
            {
                IComparable comparer = node.Tag as IComparable;
                if ((comparer != null && comparer.CompareTo(key) == 0) ||
                    node.Tag.Equals(key))
                {
                    return node;
                }
            }
        }
        return null;
    }
 
    public override bool CanExecute(object parameter)
    {
        if (typeof(RadTreeNode).IsAssignableFrom(parameter.GetType()))
        {
            return true;
        }
        return base.CanExecute(parameter);
    }
}


2) The new Find command can be used implementing a different search callback function:
private void radButton1_Click(object sender, EventArgs e)
{
    RadTreeNode nodeByName = this.radTreeView1.Find(this.FindByKey);
    RadTreeNode nodeByText = this.radTreeView1.Find(this.FindByText);
}
 
private string key;
private bool FindByKey(RadTreeNode node)
{
    if ((this.key == null) || (node.Name == null))
    {
        return false;
    }
 
    if (this.key.Length != node.Name.Length)
    {
        return false;
    }
 
    return (string.Compare(this.key, node.Name, true, CultureInfo.InvariantCulture) == 0);
}
 
private string text;
private bool FindByText(RadTreeNode node)
{
    if ((this.text == null) || (node.Text == null))
    {
        return false;
    }
 
    if (this.text.Length != node.Text.Length)
    {
        return false;
    }
 
    return (string.Compare(this.text, node.Text, true, CultureInfo.InvariantCulture) == 0);
}

3) DataBoundItem is used only in bound mode and can not be changed at run time. You can use the Tag property to reference your custom business object related to RadTreeNode object.

4) TreeNodeUI element is changed with TreeNodeElement that supports full customization. More information you can refer in our online documentation or in our Examples application, section TreeView >> Customize.

All the best,
Julian Benkov
the Telerik team
0
MP
Top achievements
Rank 1
answered on 25 May 2011, 08:02 PM

Dear Telerik,

We were using the TreeNodeUI.AssociatedNode property and now are not sure how to access this property with the new release. We had used the following code to find out which node was being double-clicked. Please advise.

foreach (TreeNodeUI treeNodeUI in this.radTreeView1.TreeViewElement.Items)
{
    if (treeNodeUI.AssociatedTreeNode == radTreeView1.SelectedNode)
    {
        uiNode = treeNodeUI;
        break;
    }
}
if (uiNode != null)
{
    if (uiNode.BoundingRectangle.Contains(e.Location))
    {   

        //do stuff

 

      }
}

0
Julian Benkov
Telerik team
answered on 28 May 2011, 12:23 PM
Hello MP,

For this scenario you can use following code snippet:

TreeNodeElement nodeElement = this.radTreeView1.TreeViewElement.GetElement(this.radTreeView1.SelectedNode);
if (nodeElement != null && nodeElement.BoundingRectangle.Contains(e.Location))
{
    //TO DO
}

Do not hesitate to contact us if you have further questions or issues.

Best wishes,
Julian Benkov
the Telerik team
Q1’11 SP1 of RadControls for WinForms is available for download; also available is the Q2'11 Roadmap for Telerik Windows Forms controls.
Tags
Treeview
Asked by
Zensell
Top achievements
Rank 1
Answers by
Julian Benkov
Telerik team
MP
Top achievements
Rank 1
Share this question
or