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

Node reset to initial edit text on node click unless refreshed

4 Answers 67 Views
TreeView
This is a migrated thread and some comments may be shown as answers.
Chameleoki
Top achievements
Rank 2
Chameleoki asked on 14 Mar 2011, 11:19 PM
I have a TreeView where clicking a context menu will add a new node and put it into edit view (as per the many examples on here). I have the inital new node text as "default", just like the example.  If I press the Enter key after editing, it works as expected and it is renamed and saved.

But if instead, during edit mode, I click on another node (or even the same node), it DOES save the changes behind the scenes but the node text resets back to the initial text of "default" until the entire page is refreshed (or another TreeView databind).

I have tried everything I can think of but I can't tell at what point it's getting saved verses when it's running the nodeclick event.

Any ideas?

4 Answers, 1 is accepted

Sort by
0
Nikolay Tsenkov
Telerik team
answered on 17 Mar 2011, 02:50 PM
Hello Chameleoki,

Could you, please, post an example of the current implementation of your TreeView? I would like to see how does the node save the new text in the background. Knowing this I should be able to suggest a solution for the problem.


Regards,
Nikolay Tsenkov
the Telerik team
0
Chameleoki
Top achievements
Rank 2
answered on 17 Mar 2011, 03:09 PM
Here's the pertinent code.  I do have RadAjaxManager on the page, and a grid that is updated when a node is clicked.  Thank you.

private
void AddNode(RadTreeViewContextMenuEventArgs e, RadTreeNode n)
        {
            RadTreeNode newNode = new RadTreeNode();
            newNode.Value = System.Guid.NewGuid().ToString();
            newNode.Text = "default";
            newNode.AllowEdit = true;
            newNode.Value = "0";
            newNode.ExpandedImageUrl = "~/Images/Folder.png";
            newNode.ImageUrl = "~/Images/Folder-close.png";
            newNode.SelectedImageUrl = "~/Images/Folder.png";
            newNode.HoveredImageUrl = "~/Images/Folder.png";
            newNode.Attributes.Add("IsLocked", "N");
            newNode.Attributes.Add("IsArchived", "N");
  
            n.Nodes.Add(newNode);
            string strScript = "Sys.Application.add_load(function(){ HighlightNode(\"" + newNode.Value + "\")})";
            string script = "HighlightNode(\"" + newNode.Value+ "\")";
            this.RadAjaxManager1.ResponseScripts.Add(script);
            lblFolderStatus.Text = "";
            rgFiles.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.Top;
            RadMenu1.FindItemByValue("Checkin").Visible = true;
            RadMenu1.FindItemByValue("Checkout").Visible = true;
        }
  
protected void RadTreeView1_ContextMenuItemClick(object sender, RadTreeViewContextMenuEventArgs e)
        {
            SharedFolder folder = new SharedFolder(int.Parse(e.Node.Value));
            UserInfo objUserInfo = UserSecurity.GetUserInfo();
            if (!string.IsNullOrEmpty(folder.StatusMessage))
            {
                RadAjaxManager1.Alert("Error Retrieving Folder.  Error:" + folder.StatusMessage);
            }
            else
            {
                switch (e.MenuItem.Value.ToString().ToUpper())
                {
                    case "ADD":
                        AddNode(e, e.Node);
                        break;
                    ........
                rgFiles.Rebind();
               }
            }
        }
  
protected void RadTreeView1_NodeEdit(object sender, RadTreeNodeEditEventArgs e)
        {
            UserInfo objUserInfo = UserSecurity.GetUserInfo();
            RadTreeNode edited = e.Node;
            edited.Text = e.Text.ToString();
            SharedFolder folder;
            if (edited.Value == "0")
            {
                folder = new SharedFolder();
                folder.FolderName = edited.Text;
                folder.ParentFolderID = int.Parse(e.Node.ParentNode.Value);
                folder.Save();
                if (!string.IsNullOrEmpty(folder.StatusMessage))
                {
                    RadAjaxManager1.Alert("Error Saving Folder.  Error:" + folder.StatusMessage);
                }
                else
                {
                    e.Node.Value = folder.ID.ToString();
                    e.Node.Text = folder.FolderName;
                    objUserInfo.RefreshFolders();
                    //RadTreeView1.DataBind();
                    RadTreeView1.FindNodeByValue(folder.ID.ToString()).Selected = true;
                    rgFiles.Rebind();
                }
            }
            else
            {
                folder = new SharedFolder(int.Parse(edited.Value));
                folder.FolderName = edited.Text;
                folder.Save();
                if (!string.IsNullOrEmpty(folder.StatusMessage))
                {
                    RadAjaxManager1.Alert("Error Saving Folder.  Error:" + folder.StatusMessage);
                }
                else
                {
                    string selectedValue = edited.Value;
                    //RadTreeView1.DataBind();
                    //RadTreeView1.FindNodeByValue(selectedValue).Selected = true;
                    objUserInfo.RefreshFolders();
                    rgFiles.Rebind();
                }
            }
        
  
protected void RadTreeView1_NodeClick(object sender, RadTreeNodeEventArgs e)
        {
            UserInfo objUserInfo = UserSecurity.GetUserInfo();
           
            if (e.Node.Attributes["CanWrite"] == "N")
            {
                lblFolderStatus.Text = "<span class='FolderWarning'>Note: You have read only permissions to this folder.</span>";
                rgFiles.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.None;
                RadMenu1.FindItemByValue("Checkin").Visible = false;
                RadMenu1.FindItemByValue("Checkout").Visible = false;
            }
            else if ((e.Node.Attributes["IsLocked"] == "Y") && (objUserInfo.UserType != "Project Admin") && (objUserInfo.UserType != "Site Admin"))
            {
                lblFolderStatus.Text = "<span class='FolderWarning'>Note: This folder has been locked by an administrator.</span>";
                rgFiles.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.None;
                RadMenu1.FindItemByValue("Checkin").Visible = false;
                RadMenu1.FindItemByValue("Checkout").Visible = false;
            }
            else
            {
                lblFolderStatus.Text = "";
                rgFiles.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.Top;
                RadMenu1.FindItemByValue("Checkin").Visible = true;
                RadMenu1.FindItemByValue("Checkout").Visible = true;
            }
            rgFiles.DataBind();
            btnDownloadFile.NavigateUrl = "~/DownloadZippedFolder.aspx?fid=" + e.Node.Value + "&sub=false";
        }
0
Nikolay Tsenkov
Telerik team
answered on 23 Mar 2011, 11:04 AM
Hi Chameleoki,

I have tested the scenario and it didn't reproduce at my end:
 - Markup:
<telerik:RadTreeView runat="server" ID="RadTreeView1" AllowNodeEditing="true"
        onnodeclick="RadTreeView1_NodeClick" onnodeedit="RadTreeView1_NodeEdit">
    <Nodes>
        <telerik:RadTreeNode Text="Node1" />
        <telerik:RadTreeNode Text="Node1" />
        <telerik:RadTreeNode Text="Node1" />
    </Nodes>
</telerik:RadTreeView>
 - Code-behind:
protected void RadTreeView1_NodeClick(object sender, RadTreeNodeEventArgs e)
{
 
}
protected void RadTreeView1_NodeEdit(object sender, RadTreeNodeEditEventArgs e)
{
    e.Node.Text = e.Text;
}
(I made a NodeClick handler in order to check if the NodeClick is being raised in the scenario, but it isn't - you can check this using my sample)

Please, step through the handler of NodeEdit using the debugger and check for a problem in the algorithm that runs.
 

Regards,
Nikolay Tsenkov
the Telerik team
0
Chameleoki
Top achievements
Rank 2
answered on 23 Mar 2011, 03:08 PM
Thank you for your looking into this.  You gave me an idea, and it worked.

The solution was to increase the RequestQueue size on the RadAjaxManager.  I guess with all of the updates on a click of the node, the editing, the refreshing of the grid and labels on the clicking of a node and such, it needed a bigger queue.
Tags
TreeView
Asked by
Chameleoki
Top achievements
Rank 2
Answers by
Nikolay Tsenkov
Telerik team
Chameleoki
Top achievements
Rank 2
Share this question
or