I have downloaded and tested the demo from here:
http://demos.telerik.com/aspnet-ajax/treeview/examples/programming/addremovedisable/defaultcs.aspx
This allows click events for adding and deleting nodes in a treeview, and for the treeview to be updated without screen flicker.
However, the demo code doesn't work for me.
For example, if I try to delete a node by clicking on the Delete Node button it doesn't even fire the DeleteButton_Click event. If I remove the reference to the DeleteButton in the RadAjaxManager, then the event fires, but I then get the screen flicker when the tree is redrawn.
The code is below:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.User.master" EnableViewState="true" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %><%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %><%@ Register TagPrefix="asp" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit"%><asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server"></asp:Content><asp:Content ID="Content2" EnableViewState="true" ContentPlaceHolderID="MainContent" Runat="Server"><telerik:RadScriptManager runat="server" ID="RadScriptManager1" /> <telerik:RadSkinManager ID="QsfSkinManager" runat="server" ShowChooser="true" /> <telerik:RadFormDecorator ID="QsfFromDecorator" runat="server" DecoratedControls="All" EnableRoundedCorners="false" /> <telerik:RadAjaxManager runat="server" ID="RadAjaxManager1"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="DisableButton"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadTreeView1" LoadingPanelID="RadAjaxLoadingPanel1"> </telerik:AjaxUpdatedControl> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="EnableAllButton"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadTreeView1" LoadingPanelID="RadAjaxLoadingPanel1"> </telerik:AjaxUpdatedControl> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="DeleteButton"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadTreeView1" LoadingPanelID="RadAjaxLoadingPanel1"> </telerik:AjaxUpdatedControl> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="AddButton"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadTreeView1" LoadingPanelID="RadAjaxLoadingPanel1"> </telerik:AjaxUpdatedControl> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel1"> </telerik:RadAjaxLoadingPanel> <ul class="qsfexAvailableActions"> <li> <asp:Button ID="DisableButton" runat="server" OnClick="DisableButton_Click" ValidationGroup="DisableRequiresSelection" Text="Disable selected node"></asp:Button> <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="Select a node first." ControlToValidate="RadTreeView1" Display="Dynamic" ValidationGroup="DisableRequiresSelection" CssClass="validator"></asp:RequiredFieldValidator> </li> <li> <asp:Button ID="EnableAllButton" runat="server" CausesValidation="False" OnClick="EnableAll_Button" Text="Enable all nodes"></asp:Button> </li> <li> <asp:Button ID="DeleteButton" runat="server" OnClick="DeleteButton_Click" ValidationGroup="DeleteRequiresSelection" Text="Delete selected node"></asp:Button> <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="Select a node first." Display="Dynamic" ControlToValidate="RadTreeView1" ValidationGroup="DeleteRequiresSelection" CssClass="validator"></asp:RequiredFieldValidator> </li> <li> <telerik:RadTextBox runat="Server" ID="NodeTextBox" EmptyMessage="Enter node text"> </telerik:RadTextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Text is required" Display="Dynamic" ControlToValidate="NodeTextBox" ValidationGroup="TextRequired" CssClass="validator"></asp:RequiredFieldValidator> </li> <li> <asp:Button ID="AddButton" runat="server" OnClick="AddButton_Click" Text="Add new node"></asp:Button> </li> </ul> <telerik:RadTreeView ID="RadTreeView1" runat="server" Height="280px" Width="300px"> </telerik:RadTreeView></asp:Content>
using System;using System.Web.UI;using System.Web.UI.WebControls;using Telerik.Web.UI;public partial class Test : System.Web.UI.Page{ private void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { RadTreeView1.LoadContentFile("tree.xml"); } } protected void DisableButton_Click(object sender, EventArgs e) { Page.Validate("DisableRequiresSelection"); if (Page.IsValid) { RadTreeView1.SelectedNode.Enabled = false; RadTreeView1.SelectedNode.Selected = false; } } protected void EnableAll_Button(object sender, EventArgs e) { foreach (RadTreeNode node in RadTreeView1.GetAllNodes()) { node.Enabled = true; } } protected void DeleteButton_Click(object sender, EventArgs e) { Page.Validate("DeleteRequiresSelection"); if (Page.IsValid) { RadTreeView1.SelectedNode.Remove(); } } protected void AddButton_Click(object sender, EventArgs e) { Page.Validate("TextRequired"); if (Page.IsValid) { IRadTreeNodeContainer target = RadTreeView1; if (RadTreeView1.SelectedNode != null) { RadTreeView1.SelectedNode.Expanded = true; target = RadTreeView1.SelectedNode; } RadTreeNode addedNode = new RadTreeNode(NodeTextBox.Text); addedNode.Selected = true; target.Nodes.Add(addedNode); } }}