Skip Navigation LinksHome / Community & Support / Developer Productivity Tools Forums / ASP.NET AJAX > TreeView > Apply VALIDATION when user Edit Node

Answered Apply VALIDATION when user Edit Node

Feed from this thread
  • Posted on Jan 16, 2012 (permalink)

    I need add custom validation (not repeat node name) when user Edit/Add new node.
    I try do it with EDITNODE event, but I can get the new name.
    All treView and node are created Dynamically

    this is my code:

     Class1.cs
    this code is execute in page_init

      RadTreeView radTreeView   = new RadTreeView { ID = "tvWorkspace" };

                        RadTreeNode parentNode = new RadTreeNode(_resources.GetString("Workspace", new CultureInfo(_culture)))
                                                     {Expanded = true};

                        radTreeView.Nodes.Add(parentNode);
                        

                        List<smWorkspace> workspaceFolder = new smOrganization().GetWorkspace(App.CurrentUserId());

                        if (workspaceFolder.Count > 0)
                        {
                            CreateNodes(workspaceFolder,  radTreeView.Nodes[0]);
                        }
                        
                        radTreeView.AllowNodeEditing = true;
                        radTreeView.NodeEdit += RadTreeView1_NodeEdit;

                        radTreeView.ContextMenus.Add(new ContextMenu().CreateContextMenu());
                        radTreeView.ContextMenuItemClick += RadTree_Contextmenutitem;
                        wsTreeview.Controls.Add(radTreeView);
                      
                        workspaceDiv.Controls.Add(wsTreeview);




     protected void RadTreeView1_NodeEdit(object sender, RadTreeNodeEventArgs e)
            {
                RadTreeNode nodeEdited = e.Node;
                string folderId = nodeEdited.Value;
                string Name = nodeEdited.Text;

    //here I need add Validation By New name and Value.

    }


      private void CreateNodes(List<smWorkspace> workspaces,  RadTreeNode parentnode)
            {
                int folderId = workspaces[0].FolderId;
                RadTreeNode rootParent = new RadTreeNode(workspaces[0].FolderName) {ImageUrl = "~/UI/Images/folder.png"};
                parentnode.Nodes.Add(rootParent);
               

                foreach (smWorkspace folder in workspaces)
                {
                    if (folder.FolderId != folderId)
                    {
                        folderId = folder.FolderId;
                        rootParent = new RadTreeNode(folder.FolderName) { ImageUrl = "~/UI/Images/folder.png", Value = folderId.ToString() };
                        parentnode.Nodes.Add(rootParent);

                    }else
                    {
                        RadTreeNode child = new RadTreeNode(folder.File.FileName);
                        string extension = Components.CommonFunctions.GetExtensionFile(folder.File.FileFullPath);
                        child.ImageUrl = CommonFunctions.GetDocumentIcon(extension);
                       
                        rootParent.Nodes.Add(child);
                    }
                   
                }
               
                
            }

    Value node is FolderId in Database.



    how and Where I can add Custom Validation?...

    I need show like this:





    Reply

  • Bozhidar Bozhidar admin's avatar

    Posted on Jan 17, 2012 (permalink)

    Hello Julieta,

    I've prepared a small sample page, where I use a hidden field, some server logic and some javascript to implement custom validation, which works on a node level. It doesn't let you change the text of a node, if it is already contained in the treeview. You can use it as a reference to modify your application.

    All the best,
    Bozhidar
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
    Attached files

    Reply

  • Posted on Jan 18, 2012 (permalink)

    I need do it by c# code , because I use resources :-(


    it is possible creaye NoteTemplate with Node and Customvalidator?

    I try this but I can do nothing.

    Reply

  • Bozhidar Bozhidar admin's avatar

    Posted on Jan 23, 2012 (permalink)

    Hi Julieta,

    Attached is another sample page, this time using the method you've described - node template with custom validator. The sample illustrates the Edit validation functionality. You can use the same logic and apply it to the creating of new nodes as well.
     
    Regards,
    Bozhidar
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
    Attached files

    Reply

  • Posted on Jan 25, 2012 (permalink)

    Thanks Bozhidar !!
    That's works perfectly!!!! BUT i create my TV programmatically....

    I do a new project... And I have this issue now...


    My Aspx.cs
    using System;
    using System.Resources;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Telerik.Web.UI;

    namespace WebSearch.UI
    {
        public partial class WebForm1 : System.Web.UI.Page
        {

            private RadTreeNode editedNode = null;

            protected void Page_Load(object sender, EventArgs e)
            {
                CreateTreeView();
            }


            protected  void Validate(object source, ServerValidateEventArgs args)
            {
                bool isUsed = false;

                RadTreeView tv = (RadTreeView)((RadTreeNode)((Label)source).Parent).Parent;

                var node = (RadTreeNode)((Label)source).Parent;

                for (int i = 0; i < tv.GetAllNodes().Count; i++)
                {
                    if (node == editedNode && tv.GetAllNodes()[i].Text == node.Text && tv.GetAllNodes()[i] != node)
                    {
                        isUsed = true;
                        break;
                    }
                }
                args.IsValid = !isUsed;
            }
                
              
            private void CreateTreeView(){

                RadTreeView tv = new RadTreeView {ID = "myTv"};
                tv.NodeEdit += RadTreeView1_NodeEdit;
                tv.AllowNodeEditing = true;
               
               
                
                RadTreeNode rootNode = new RadTreeNode {Value = "0", Text = "ROOT"};
                rootNode.Attributes["Type"]   ="R";

                tv.Nodes.Add(rootNode);

                RadTreeNode folder = new RadTreeNode {Value = "1", Text = "node1"};
                folder.Attributes["Type"]   ="F";

                RadTreeNode Subfolder = new RadTreeNode {Value = "11", Text = "node11"};
                Subfolder.Attributes["Type"]   ="SF";
                folder.Nodes.Add(Subfolder);

                Subfolder = new RadTreeNode {Value = "112", Text = "node12"};
                Subfolder.Attributes["Type"]   ="SF";
                folder.Nodes.Add(Subfolder);

                rootNode.Nodes.Add(folder);

                folder = new RadTreeNode {Value = "2", Text = "node2"};
                folder.Attributes["Type"]   ="F";

                Subfolder = new RadTreeNode {Value = "211", Text = "node21"};
                Subfolder.Attributes["Type"]   ="SF";
                folder.Nodes.Add(Subfolder);

                Subfolder = new RadTreeNode {Value = "22", Text = "node22"};
                Subfolder.Attributes["Type"]   ="SF";
                folder.Nodes.Add(Subfolder);

                rootNode.Nodes.Add(folder);

                 

                

        foreach (RadTreeNode node in tv.GetAllNodes())
        {
            MyTemplateNode template = new MyTemplateNode(node);
            template.InstantiateIn(node);
        }

                TVDiv.Controls.Add(tv);

            }

            protected void RadTreeView1_NodeEdit(object sender, RadTreeNodeEditEventArgs e)
            {
                string oldValue = e.Node.Text;
                e.Node.Text = e.Text;
                editedNode = e.Node;
                Session["EditNode"] = e.Text;
                
                Page.Validate();
                if (!Page.IsValid)
                    e.Node.Text = oldValue;

                editedNode = null;
              //  RadTreeView1.DataBind();
            }

        }

         public class MyTemplateNode : ITemplate
        {
            private ResourceManager _resources;
            private string _culture;
            private string textNode;

            public MyTemplateNode(RadTreeNode node)
            {
                textNode = node.Text;
            }


             public void InstantiateIn(Control container)
            {
                
                Label label1 = new Label();
                label1.ID = "ItemLabel";
                label1.Text = textNode;
                label1.Font.Size = 10;
                label1.Font.Bold = true;
                label1.DataBinding += new EventHandler(label1_DataBinding);
                container.Controls.Add(label1);

                 CustomValidator cv = new CustomValidator();
                 cv.ID = "CustomValidator1";
                
                 cv.ErrorMessage = "name already taken";
                 cv.ServerValidate += Validate;

                 container.Controls.Add(cv);
            }

             private void Validate(object source, ServerValidateEventArgs args)
             {
                 Label lbl = (Label) source;

                 string newValue = System.Web.HttpContext.Current.Session["EditNode"].ToString();

               if (string.IsNullOrEmpty(lbl.Text))
               {
                   args.IsValid = false;
               }

             }

             private void label1_DataBinding(object sender, EventArgs e)
        {
            Label target = (Label)sender;
            RadTreeNode node = (RadTreeNode)target.BindingContainer;
            string nodeText = (string)DataBinder.Eval(node, node.Text);
            target.Text = nodeText;
        }


       
          
               
        }

    }



    My ASPX

    %@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebSearch.UI.WebForm1" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
         <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <div id="TVDiv" runat="server">
         
          

        </div>
        </form>
    </body>
    </html>


    I try to do this:


       CustomValidator cv = new CustomValidator();
                 cv.ID = "CustomValidator1";
              cv.ControlToValidate = "ItemLabel";
                 cv.ErrorMessage = "name already taken";
                 cv.ServerValidate += Validate;


    But I have this issue



    Can you help me?

    thanks

    Reply

  • Posted on Feb 3, 2012 (permalink)

    Please!!! I need help

    Reply

  • Answer Bozhidar Bozhidar admin's avatar

    Posted on Feb 3, 2012 (permalink)

    Hi Julieta,

    I've modified your code to make the sample run correctly. Please find the modified page attached to this reply.
     
    Regards,
    Bozhidar
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
    Attached files

    Reply

  • Posted on Feb 3, 2012 (permalink)

    Oh thanks!! I will try this..

    Reply

Back to Top

Skip Navigation LinksHome / Community & Support / Developer Productivity Tools Forums / ASP.NET AJAX > TreeView > Apply VALIDATION when user Edit Node
Related resources for "Apply VALIDATION when user Edit Node"

ASP.NET TreeView Features  |   Documentation   |  Demos  |  Telerik TV  |  Self-Paced Trainer  |  Step-by-step Tutorial  ]