Remove node in treepanel and add new node.

  1. #1

    Remove node in treepanel and add new node.

    Hi guys.

    I has a problem, I create a TreePanel and add dynamic Note in code-behind.
    When i click a button, Datatable is use to create node changes, i want to remove old RootNode and add new RootNode. But it isn't change.
    So, I don't know why TreePanel don't change when datatable change.
    Could you help me?
    Please give me some advise.

    Here is my code.

    <ext:TreePanel ID="tree2" runat="server" Layout="VBoxLayout" Region="Center" AutoScroll="true"
                           RootVisible="false" SingleExpand="true" UseArrows="true" Margin="0" Padding="0">
           <Listeners>
                  <ItemAppend Buffer="30" />
                  <ItemCollapse Buffer="30" />
                  <CheckChange Fn="onCheckChange" />
           </Listeners>
    </ext:TreePanel>
    private void fn_CreateNodeDepartment(string ID)
        {
            if (!b_UserAccessData.fn_GetAllData((ID == "" ? Guid.NewGuid() : new Guid(ID))))
            {
                Globals.fn_Show_Error_Info(1, "Lỗi lấy dữ liệu ph?ng ban<br/>" + b_UserAccessData.mn_Error);
                this.fn_SetHiddenButton(0);
                return;
            }
            DataTable dt = new DataTable();
            dt = b_UserAccessData.mn_Table;
    
            System.Data.DataView dv = new System.Data.DataView(dt);
            dv.RowFilter = "ParentID is null";
    
            Node NodeRoot = new Node() { NodeID = "root" };
    
            foreach (DataRowView row in dv)
            {
                Node node = new Node()
                {
                    NodeID = row["DepartmentID"].ToString(),
                    Text = row["DepartmentName"].ToString(),
                    Checked = Convert.ToBoolean(row["Check"])
                };
                node.Expanded = true;
                node.Icon = Icon.House;
                addNode(node, dt);
                NodeRoot.Children.Add(node);
            }
            tree2.Root.Add(NodeRoot);
        }
    Have a nice day.
    Thank before.
  2. #2
    Hi @dinhhung09138,

    Hard to say. If you can provide a runnable sample, we could investigate.
  3. #3
    Dear Daniil.

    First. Thanks for your response.
    Second, Here is simple demo about datatable is changed but treepanel is not change. in this demo, i'm only change value of 'check' column in datatable.
    In fact, my data is complex more than.


    Here is my code.

    asp.net

    <ext:TreePanel ID="tree2" runat="server" Layout="VBoxLayout" Region="Center" AutoScroll="true"
                    RootVisible="false" SingleExpand="true" UseArrows="true" Margin="0" Padding="0">
                    <TopBar>
                        <ext:Toolbar runat="server">
                            <Items>
                                <ext:ToolbarFill runat="server" />
                                <ext:Button runat="server" ID="cmd_1" Text="1" Width="80" Icon="PageWhitePut"
                                    OnDirectClick="cmd_1_Click" />
                                <ext:ToolbarSeparator ID="tbs_1" runat="server" />
                                <ext:Button runat="server" ID="cmd_2" Text="2" Width="80" Icon="PageWhitePut"
                                    OnDirectClick="cmd_2_Click" />
                                <ext:ToolbarSeparator ID="tbs_2" runat="server" />
                            </Items>
                        </ext:Toolbar>
                    </TopBar>
                    <Listeners>
                        <ItemAppend Buffer="30" />
                        <ItemCollapse Buffer="30" />
                    </Listeners>
                </ext:TreePanel>
    code-behind
    protected void Page_Load(object sender, EventArgs e)
        {
            if (!X.IsAjaxRequest)
            {
                this.fn_GenerateTable(true);
            }
        }
    
        protected void cmd_1_Click(object sender, DirectEventArgs e)
        {
            this.fn_GenerateTable(true);
        }
    
        protected void cmd_2_Click(object sender, DirectEventArgs e)
        {
            this.fn_GenerateTable(false);
        }
    
        /// <summary>
        /// Change value of 'check' column in datatable.
        /// </summary>
        /// <param name="tmp"></param>
        private void fn_GenerateTable(bool tmp)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("DepartmentID", typeof(int));
            dt.Columns.Add("DepartmentName", typeof(string));
            dt.Columns.Add("Check",typeof(bool));
            for (int i = 0; i < 10; i++)
            {
                DataRow r = dt.NewRow();
                r["DepartmentID"] = i;
                r["DepartmentName"] = "Departnemt " + i.ToString();
                if (tmp && i % 2 == 0)
                    r["Check"] = true;
                else
                    r["Check"] = false;
                dt.Rows.Add(r);
            }
            this.fn_CreateNodeDepartment(dt);
        }
    
        private void fn_CreateNodeDepartment(DataTable dt)
        {
            Node NodeRoot = new Node() { NodeID = "root" };
            foreach (DataRow row in dt.Rows)
            {
                Node node = new Node()
                {
                    NodeID = row["DepartmentID"].ToString(),
                    Text = row["DepartmentName"].ToString(),
                    Checked = Convert.ToBoolean(row["Check"]),
                    Icon = Icon.House
                };
                NodeRoot.Children.Add(node);
            }
            tree2.Root.Add(NodeRoot);
        }
    Thanks Danil.
    Last edited by dinhhung09138; Mar 20, 2014 at 8:53 AM.
  4. #4
    Thank you, I was able to run your code.

    Please describe exact steps to reproduce the problem.
  5. #5
    Hi daniil.
    Thanks for your response.

    this is a problem.
    In this demo. When page load you can see checkboxs on rows (department 0, 2, 4, 6, 8) are checked, anothers are not. then i will check all of checkboxs are not checked and then click the button 2. The result after that i want to see is all checkbox is uncheck. But it's not change.

    Thank you.
  6. #6
    Changes in a TreePanel's Root during a DirectEvent are not rendered to client automatically.

    You can explicitly tell to a TreePanel to re-render.
    protected void cmd_2_Click(object sender, DirectEventArgs e)
    {
        this.fn_GenerateTable(false);
        tree2.Render();
    }
  7. #7
    Thank Daniil.

    Quote Originally Posted by Daniil View Post
    You can explicitly tell to a TreePanel to re-render.
    protected void cmd_2_Click(object sender, DirectEventArgs e)
    {
        this.fn_GenerateTable(false);
        tree2.Render();
    }
    It's work fine...

    Thanks again.

Similar Threads

  1. TreePanel node loaded: true to have node cached.
    By millenovanta in forum 2.x Help
    Replies: 0
    Last Post: Nov 28, 2013, 11:32 AM
  2. Replies: 11
    Last Post: Feb 06, 2013, 5:09 PM
  3. Treepanel - Checkbox Remove Icon from Node?
    By Tbaseflug in forum 2.x Help
    Replies: 1
    Last Post: Jan 08, 2013, 12:26 AM
  4. [CLOSED] [1.0] TreePanel remove node - icon changes
    By danielg in forum 1.x Legacy Premium Help
    Replies: 4
    Last Post: Jan 22, 2010, 10:38 AM
  5. TreePanel:Copying from one node to another node using drag and drop
    By eighty20 in forum 1.x Legacy Premium Help
    Replies: 5
    Last Post: Jan 25, 2009, 7:48 AM

Tags for this Thread

Posting Permissions