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

Apply VALIDATION when user Edit Node

7 Answers 116 Views
TreeView
This is a migrated thread and some comments may be shown as answers.
July
Top achievements
Rank 2
July asked on 16 Jan 2012, 07:47 PM
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:





7 Answers, 1 is accepted

Sort by
0
Bozhidar
Telerik team
answered on 17 Jan 2012, 05:43 PM
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
0
July
Top achievements
Rank 2
answered on 18 Jan 2012, 09:31 PM
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.

0
Bozhidar
Telerik team
answered on 23 Jan 2012, 01:51 PM
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
0
July
Top achievements
Rank 2
answered on 25 Jan 2012, 03:17 PM
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
0
July
Top achievements
Rank 2
answered on 03 Feb 2012, 03:32 PM
Please!!! I need help
0
Accepted
Bozhidar
Telerik team
answered on 03 Feb 2012, 05:38 PM
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
0
July
Top achievements
Rank 2
answered on 03 Feb 2012, 05:52 PM
Oh thanks!! I will try this..
Tags
TreeView
Asked by
July
Top achievements
Rank 2
Answers by
Bozhidar
Telerik team
July
Top achievements
Rank 2
Share this question
or