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