Below is a sample program and the code I use to recursively check the child nodes. If you click on the checkbox of one of the Mains it will check all children and expand it.
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls.UI;
namespace TreeViewTest
{
public partial class Form1 : Form
{
private System.ComponentModel.IContainer components;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
private Telerik.WinControls.UI.RadTreeView radTreeView1;
private void InitializeComponent()
{
this.radTreeView1 = new Telerik.WinControls.UI.RadTreeView();
((System.ComponentModel.ISupportInitialize)(this.radTreeView1)).BeginInit();
this.SuspendLayout();
//
// radTreeView1
//
this.radTreeView1.Location = new System.Drawing.Point(1, 13);
this.radTreeView1.Name = "radTreeView1";
this.radTreeView1.Size = new System.Drawing.Size(496, 347);
this.radTreeView1.SpacingBetweenNodes = -1;
this.radTreeView1.TabIndex = 0;
this.radTreeView1.Text = "radTreeView1";
this.radTreeView1.NodeCheckedChanged += new Telerik.WinControls.UI.RadTreeView.TreeViewEventHandler(this.radTreeView1_NodeCheckedChanged);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(497, 372);
this.Controls.Add(this.radTreeView1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.radTreeView1)).EndInit();
this.ResumeLayout(false);
}
public Form1()
{
InitializeComponent();
}
private void radTreeView1_NodeCheckedChanged(object sender, Telerik.WinControls.UI.RadTreeViewEventArgs e)
{
this.radTreeView1.NodeCheckedChanged -= radTreeView1_NodeCheckedChanged;
if (e.Node.Nodes.Count > 0)
{
this.CheckAllChildNodes(e.Node, e.Node.Checked);
}
e.Node.Expanded = true;
RadTreeNode topNode = GetTopNode(e.Node);
CheckAllChildNodesForChecked(topNode);
this.radTreeView1.NodeCheckedChanged += new RadTreeView.TreeViewEventHandler(radTreeView1_NodeCheckedChanged);
}
private void CheckAllChildNodes(RadTreeNode treeNode, bool nodeChecked)
{
foreach (RadTreeNode node in treeNode.Nodes)
{
node.Checked = nodeChecked;
if (node.Nodes.Count > 0)
{
this.CheckAllChildNodes(node, nodeChecked);
}
}
}
private bool CheckAllChildNodesForChecked(RadTreeNode treeNode)
{
bool childChecked = false;
foreach (RadTreeNode node in treeNode.Nodes)
{
if (node.Nodes.Count > 0)
{
if (this.CheckAllChildNodesForChecked(node))
{
childChecked = true;
}
}
else
{
if (!childChecked)
{
childChecked = node.Checked;
}
}
}
if (childChecked)
{
treeNode.Checked = true;
}
else
{
treeNode.Checked = false;
}
return childChecked;
}
private RadTreeNode GetTopNode(RadTreeNode treeNode)
{
RadTreeNode topTreeNode = treeNode;
if (topTreeNode.Parent != null)
{
topTreeNode = GetTopNode(topTreeNode.Parent);
}
return topTreeNode;
}
private void Form1_Load(object sender, EventArgs e)
{
radTreeView1.Nodes.Clear();
RadTreeNode root = new RadTreeNode("root");
root.CheckType = CheckType.CheckBox;
for (int x = 1; x < 4; x++)
{
RadTreeNode main = new RadTreeNode("Main " + x.ToString());
main.CheckType = CheckType.CheckBox;
for (int y = 1; y < 4; y++)
{
RadTreeNode sub = new RadTreeNode("Sub " + y.ToString());
sub.CheckType = CheckType.CheckBox;
main.Nodes.Add(sub);
}
main.Expanded = false;
root.Nodes.Add(main);
}
root.Expanded = true;
radTreeView1.Nodes.Add(root);
}
}
}