说明:
显示复选框时,点击父节点、子节点全选;如果子节点全选,父节点会被选中;
/// <summary>
/// 点击节点前
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeLstModuleAction_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
{
e.State = (e.PrevState == CheckState.Checked ? CheckState.Unchecked : CheckState.Checked);
}
/// <summary>
/// 点击节点后
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeLstModuleAction_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
{
SetCheckedChildNodes(e.Node, e.Node.CheckState);
SetCheckedParentNodes(e.Node, e.Node.CheckState);
}
/// <summary>
/// 选择子节点时触发
/// </summary>
/// <param name="node"></param>
/// <param name="check"></param>
private void SetCheckedChildNodes(TreeListNode node, CheckState check)
{
for (int i = 0; i < node.Nodes.Count; i++)
{
node.Nodes[i].CheckState = check;
SetCheckedChildNodes(node.Nodes[i], check);
}
}
/// <summary>
/// 选择父节点时触发
/// </summary>
/// <param name="node"></param>
/// <param name="check"></param>
private void SetCheckedParentNodes(TreeListNode node, CheckState check)
{
if (node.ParentNode != null)
{
bool b = false;
CheckState state;
for (int i = 0; i < node.ParentNode.Nodes.Count; i++)
{
state = (CheckState)node.ParentNode.Nodes[i].CheckState;
if (!check.Equals(state))
{
b = !b;
break;
}
}
node.ParentNode.CheckState = b ? CheckState.Indeterminate : check;
SetCheckedParentNodes(node.ParentNode, check);
}
}
获取所有勾选的ID //选择ID集合
private List<int> list = new List<int>();
///<summary>
///获取选择状态的数据主键ID集合
///</summary>
///<param name="parentNode">父级节点</param>
private void GetCheckedID(TreeListNode parentNode)
{
if(parentNode.Nodes.Count == 0)
{
//递归终止
return;
}
foreach(TreeListNode node in parentNode.Nodes)
{
if (node.CheckState== CheckState.Checked)
{
//关键代码
DataRowView drv = treeList1.GetDataRecordByNode(node) as DataRowView;
if (drv != null)
{
int ID = (int)drv["KeyFieldName"];
list.Add(ID);
}
}
GetCheckedID(node);
}
}