Problem with the selected node to group / ungroup

4 posts, 0 answers
  1. Cesar
    Cesar avatar
    21 posts
    Member since:
    Oct 2012

    Posted 12 Mar 2015 Link to this post

    Hi;

    I have a problem when I want a selected node and Group / Ungroup the tree holding the selected node. Here's an example to understand the case:
    public Form1()
    {
        InitializeComponent();
     
        DataTable table = new DataTable();
        table.Columns.Add("ID", typeof(int));
        table.Columns.Add("ID_PADRE", typeof(int));
        table.Columns.Add("Codigo", typeof(string));
        table.Columns.Add("TEXTO_NODO", typeof(string));
        table.Columns.Add("TIPO", typeof(string));
        table.Rows.Add(1, null, "COD 1", "Descripción 1","C");
        table.Rows.Add(2, null, "COD 2", "Descripción 2","E");
        table.Rows.Add(3, null, "COD 3", "Descripción 3", "A");
        table.Rows.Add(4, null, "COD 4", "Descripción 4", "S");
        table.Rows.Add(5, null, "COD 5", "Descripción 5", "R");
        table.Rows.Add(6, 1, "COD 6", "Descripción 6","S");
        table.Rows.Add(7, 2, "COD 7", "Descripción 7","R");
        table.Rows.Add(8, 3, "COD 8", "Descripción 8","R");
        table.Rows.Add(9, 4, "COD 9", "Descripción 9","S");
        table.Rows.Add(10, 5, "COD 10", "Descripción 10","C");
        table.Rows.Add(11, 1, "COD 11", "Descripción 11","R");
        table.Rows.Add(12, 2, "COD 12", "Descripción 12","S");
        table.Rows.Add(13, 3, "COD 13", "Descripción 13","A");
        table.Rows.Add(14, 4, "COD 14", "Descripción 14","E");
        table.Rows.Add(15, 5, "COD 15", "Descripción 15","R");
        table.Rows.Add(16, 6, "COD 16", "Descripción 16","S");
        table.Rows.Add(17, 7, "COD 17", "Descripción 17","E");
        table.Rows.Add(18, 8, "COD 18", "Descripción 18","R");
        table.Rows.Add(19, 9, "COD 19", "Descripción 19","C");
        table.Rows.Add(20, 10, "COD 20", "Descripción 20","A");
        table.Rows.Add(21, 20, "COD 21", "Descripción 21","S");
         
        this.radTreeView1.DataSource = table;
        this.radTreeView1.DisplayMember = "TEXTO_NODO";
        this.radTreeView1.ChildMember = "ID";
        this.radTreeView1.ParentMember = "ID_PADRE";
        this.radTreeView1.ExpandAll();
     
        this.radGridView1.Relations.AddSelfReference(this.radGridView1.MasterTemplate, "ID_PADRE", "ID");
        this.radGridView1.DataSource = table;
         
    }
    private void ungroup()
    {
        RadTreeNode oNode = this.radTreeView1.SelectedNode;
     
        this.radTreeView1.ChildMember = "";
        this.radTreeView1.ParentMember = "";
     
        this.radTreeView1.SelectedNode = oNode;
    }
    private void group()
    {
        RadTreeNode oNode = this.radTreeView1.SelectedNode;
     
        this.radTreeView1.ChildMember = "ID";
        this.radTreeView1.ParentMember = "ID_PADRE";
        this.radTreeView1.ExpandAll();
     
        this.radTreeView1.SelectedNode = oNode;
    }
    private void label1_Click(object sender, EventArgs e)
    {
        this.ungroup();
    }
     
    private void label2_Click(object sender, EventArgs e)
    {
        this.group();
    }

    If I have a selected node when calling the method to group / ungroup not maintained after I selected group / ungroup. I tried with what appears in the code but can not.

    Thanks for the help.

    Regards!
  2. Hristo
    Admin
    Hristo avatar
    716 posts

    Posted 17 Mar 2015 Link to this post

    Hi Cesar,

    Thank you for writing.

    I believe the Filter property of the RadTreeView could deliver the desired behavior. Please refer to this example for detailed information.

    I have slightly modified the Group and Ungroup methods in your code, so that we take advantage of the filtering functionality of the RadTreeView. Please see my code snippet below:
    private void Ungroup()
    {
        this.radTreeView1.Filter = "";
    }
     
    private void Group()
    {
        RadTreeNode oNode = this.radTreeView1.SelectedNode;
        if (oNode != null)
        {
            this.radTreeView1.Filter = oNode.Text;
        }
    }

    I am also sending you a gif file of the result on my end.

    I hope this information helps. Should you have further questions please do not hesitate to write back.

    Regards,
    Hristo Merdjanov
    Telerik
     

    Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

     
  3. UI for WinForms is Visual Studio 2017 Ready
  4. Cesar
    Cesar avatar
    21 posts
    Member since:
    Oct 2012

    Posted 17 Mar 2015 Link to this post

    Hi;

    Thanks for the awnser. This solution is useful. I do not want to filter, I want all the nodes still appear.

    I attach a gif with the current situation. I want that when I grouping / ungroup continue to keep the node that was selected before the action.
  5. Hristo
    Admin
    Hristo avatar
    716 posts

    Posted 19 Mar 2015 Link to this post

    Hi Cesar,

    Thank you for writing back.

    If I understand you correctly you would like the RadTreeView to display the node which was selected prior to grouping and ungrouping as selected after the operation had been performed. 

    If that is the case, you would need to manually find the node which needs to be selected and set the Selected property to true. Using the code you provided last time I prepared a sample implementation how this can be achieved. Please see my code snippet below:
    RadTreeNode oNode;
    private void Ungroup()
    {
        oNode = this.radTreeView1.SelectedNode;
        if (oNode != null)
        {
            this.radTreeView1.ChildMember = "";
            this.radTreeView1.ParentMember = "";
     
            RadTreeNode selectedNode = this.radTreeView1.Nodes.FirstOrDefault(n => n.Name == oNode.Name);
            if (selectedNode != null)
            {
                selectedNode.Selected = true;
            }
        }
    }
     
    private void Group()
    {
        oNode = this.radTreeView1.SelectedNode;
     
        this.radTreeView1.ChildMember = "ID";
        this.radTreeView1.ParentMember = "ID_PADRE";
        this.radTreeView1.ExpandAll();
     
        this.radTreeView1.SelectedNode = oNode;
        this.FindRecursive(this.radTreeView1.Nodes);
    }
     
    private void FindRecursive(RadTreeNodeCollection nodes)
    {
        foreach (RadTreeNode node in nodes)
        {
            if (node.Name == oNode.Name)
            {
                node.Selected = true;
                return;
            }
            else if (node.Nodes.Count > 0)
            {
                FindRecursive(node.Nodes);
            }
        }
    }

    I am also sending you a gif file with the result on my side.

    I hope this information helps. Should you have further questions please do not hesitate to write back.

    Regards,
    Hristo Merdjanov
    Telerik
     

    Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

     
Back to Top