如果只是想实现节点选中的话,TreeList其实是由一个参数,可以控制父节点选中时,其子节点也一并选中的。
这里是针对TreeList的其他列值,因此用到了递归。
效果图:
/// <summary>
/// 递归树
/// </summary>
/// <param name="parentNode">父节点:即焦点节点</param>
/// <param name="val">父节点的值</param>
/// <param name="colID">列值</param>
private void GetChildNodes(TreeListNode parentNode, bool val, TreeListColumn colID)
{
if (parentNode.Nodes.Count > 0)
{
foreach (TreeListNode node in parentNode.Nodes)
{
if (node.Nodes.Count > 0)
{
GetChildNodes(node, val, colID);
node.SetValue(colID, val);
}
else
{
node.SetValue(colID, val);
}
}
}
}
我是在CellValueChanged的时候调用的,这有个弊端就是不是点中就触发,还需要回车才可以触发:
private void PerTree_CellValueChanged(object sender, DevExpress.XtraTreeList.CellValueChangedEventArgs e)
{
GetChildNodes(PerTree.FocusedNode, bool.Parse(PerTree.FocusedNode.GetValue(e.Column).ToString()), e.Column);
}