treeList1.OptionsView.ShowCheckBoxes = true;
treeList1.OptionsBehavior.AllowIndeterminateCheckState = true;
//控制checkout的关联 选中父节点,子节点也被选中。子节点全部选中时,父节点自动选中。子节点可以单独选中
//判断鼠标点击前节点是否被选择
private void treeList1_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
{
if (e.PrevState == CheckState.Checked)
{
e.State = CheckState.Unchecked;
}
else
{
e.State = CheckState.Checked;
}
}
//鼠标点击后相关父、子节点的状态 , 在TreeList_AfterCheckNode里面触发:
private void treeList1_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="state"></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 IsSelect = false;
CheckState state;
for (int i = 0; i < node.ParentNode.Nodes.Count; i++)
{
state = (CheckState)node.ParentNode.Nodes[i].CheckState;
if (!check.Equals(state))
{
IsSelect = !IsSelect;
break;
}
}
if (IsSelect)
{
node.ParentNode.CheckState = CheckState.Indeterminate;
}
else
{
node.ParentNode.CheckState = check;
}
SetCheckedParentNodes(node.ParentNode, check);
}
}
private void GetCheckedNodes(TreeListNode parentNode, List<Objects.Domain.Material> lstmarterial)
{
foreach (TreeListNode n in parentNode.Nodes)
{
if (n.Checked)
{
var checkedNode = (Objects.Domain.Material)n.GetValue("Material");
lstmarterial.Add(checkedNode);
}
if (n.Nodes.Count > 0)
this.GetCheckedNodes(n, lstmarterial);
}
}
private void CancleCheckedNodes(TreeListNode parentNode)
{
foreach (TreeListNode n in parentNode.Nodes)
{
if (n.Checked)
{
n.CheckState = CheckState.Unchecked;
}
if (n.Nodes.Count > 0)
{
CancleCheckedNodes(n);
}
}
}
//获取选中节点的数据
GetCheckedNodes(this.treeList1.Nodes);//调用方法
List<Objects.Custom.Material_Stock> lstCheckedMaterial = new List<Objects.Custom.Material_Stock>();
private void GetCheckedNodes(TreeListNodes nodes)
{
foreach (TreeListNode item in nodes)
{
if (item.Checked)
{
var checkedMat = (Material_Stock)this.treeList1.GetDataRecordByNode(item);
lstCheckedMaterial.Add(checkedMat);
}
if (item.Nodes != null && item.Nodes.Count != 0)
{
GetCheckedNodes(item.Nodes);
}
}
}
treelist中自带的checkNode,全选,全部选,部分选
最新推荐文章于 2020-08-07 16:44:14 发布