How to reproduce:
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
private BindingList<TreeViewDataObject> data;
public static int Id = 0;
public RadForm1()
{
InitializeComponent();
var theme = new FluentTheme();
ThemeResolutionService.ApplicationThemeName = theme.ThemeName;
this.data = new BindingList<TreeViewDataObject>();
for (int i = 1; i <= 5; i += 1)
{
Id++;
TreeViewDataObject root = new TreeViewDataObject()
{
Id = Id,
ParentId = -1,
Name = "Root: " + i
};
this.data.Add(root);
for (int j = 1; j <= 3; j++)
{
Id++;
TreeViewDataObject child = new TreeViewDataObject()
{
Id = Id,
ParentId = root.Id,
Name = "Child: " + Id
};
this.data.Add(child);
for (int K = 1; K <= 5; K++)
{
Id++;
TreeViewDataObject c = new TreeViewDataObject()
{
Id = Id,
ParentId = child.Id,
Name = "Child: " + Id
};
this.data.Add(c);
}
}
}
this.radTreeView1.DataSource = this.data;
this.radTreeView1.DisplayMember = "Name";
this.radTreeView1.ParentMember = "ParentId";
this.radTreeView1.ChildMember = "Id";
this.radTreeView1.RelationBindings.Add(new RelationBinding(this.data, "Name", "ParentId", "Id"));
this.radTreeView1.ExpandAll();
this.radTreeView1.TreeViewElement.AllowEdit = true;
this.radTreeView1.TreeViewElement.AllowAdd = true;
this.radTreeView1.TreeViewElement.AllowRemove = true;
}
}
public class TreeViewDataObject
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Name { get; set; }
}
Workaround: Handle the ContextMenuOpening event and add logic for creating a new record in the data source object
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
private BindingList<TreeViewDataObject> data;
private int id = 0;
public RadForm1()
{
InitializeComponent();
var theme = new FluentTheme();
ThemeResolutionService.ApplicationThemeName = theme.ThemeName;
this.data = new BindingList<TreeViewDataObject>();
for (int i = 1; i <= 5; i += 1)
{
id++;
TreeViewDataObject root = new TreeViewDataObject()
{
Id = id,
ParentId = -1,
Name = "Root: " + i
};
this.data.Add(root);
for (int j = 1; j <= 3; j++)
{
id++;
TreeViewDataObject child = new TreeViewDataObject()
{
Id = id,
ParentId = root.Id,
Name = "Child: " + id
};
this.data.Add(child);
for (int K = 1; K <= 5; K++)
{
id++;
TreeViewDataObject c = new TreeViewDataObject()
{
Id = id,
ParentId = child.Id,
Name = "Child: " + id
};
this.data.Add(c);
}
}
}
this.radTreeView1.DataSource = this.data;
this.radTreeView1.DisplayMember = "Name";
this.radTreeView1.ParentMember = "ParentId";
this.radTreeView1.ChildMember = "id";
this.radTreeView1.RelationBindings.Add(new RelationBinding(this.data, "Name", "ParentId", "id"));
this.radTreeView1.ExpandAll();
this.radTreeView1.ContextMenuOpening += RadTreeView1_ContextMenuOpening;
this.radTreeView1.TreeViewElement.AllowEdit = true;
this.radTreeView1.TreeViewElement.AllowAdd = true;
this.radTreeView1.TreeViewElement.AllowRemove = true;
}
private void RadTreeView1_ContextMenuOpening(object sender, TreeViewContextMenuOpeningEventArgs e)
{
TreeViewDefaultContextMenu treeMenu = e.Menu as TreeViewDefaultContextMenu;
treeMenu.Items.Remove(treeMenu.AddMenuItem);
RadMenuItem item = new RadMenuItem("&New");
item.Click -= Item_Click;
item.Click += Item_Click;
treeMenu.Items.Insert(2, item);
}
private void Item_Click(object sender, EventArgs e)
{
RadTreeNode parent = this.radTreeView1.SelectedNode;
if (parent == null || parent.DataBoundItem == null)
{
return;
}
this.id++;
BindingList<TreeViewDataObject> data = this.radTreeView1.DataSource as BindingList<TreeViewDataObject>;
TreeViewDataObject newObject = new TreeViewDataObject()
{
Id = this.id,
ParentId = ((TreeViewDataObject)parent.DataBoundItem).Id,
Name = "New Name"
};
parent.Expanded = true;
data.Add(newObject);
}
}
public class TreeViewDataObject
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Name { get; set; }
}