突然想到没把自己提的问题回答完,其实当时就搞定了!其实就是跟着节点去赋值就可以了,然后把选项框隐藏,自己把问题想复杂了,不过应该还有更好的方法,但我就用这个写在了项目里,如果有更好的更好哈哈!!还是来看代码吧
private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)//点击树节点后事件
{
DevExpress.XtraTreeList.Nodes.TreeListNode newnode = e.Node;
dynamic aa = treeList1.GetDataRecordByNode(newnode);
var bb = from i in treedata //treedata是我的数据源
where i.FID == aa.FID
select i;
if (newnode.CheckState != CheckState.Unchecked)
{
foreach (var c in bb)
{
c.FSel =true;//数据源中的选择框跟着赋值true勾选
}
}
else
{
foreach (var c in bb)
{
c.FSel = false;//数据源中的选择框跟着赋值false取消勾选
}
}
SetCheckedChildNodes(e.Node, e.Node.CheckState);
SetCheckedParentNodes(e.Node, e.Node.CheckState);
}
private void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)
{
for (int i = 0; i < node.Nodes.Count; i++)
{
node.Nodes[i].CheckState = check;//
dynamic aa = treeList1.GetDataRecordByNode(node.Nodes[i]);
var bb = from b in treedata
where b.FID == aa.FID
select b;
if (check != CheckState.Unchecked)
{
foreach (var c in bb)
{
c.FSel = true;
}
}
else
{
foreach (var c in bb)
{
c.FSel = false;
}
}
SetCheckedChildNodes(node.Nodes[i], check);
}
}
private void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.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;
dynamic aa = treeList1.GetDataRecordByNode(node.ParentNode);
var data = from d in treedata
where d.FID == aa.FID
select d;
if (node.ParentNode.CheckState == CheckState.Unchecked)
{
foreach (var c in data)
{
c.FSel = false;
}
}
else
{
foreach (var c in data)
{
c.FSel = true;
}
}
SetCheckedParentNodes(node.ParentNode, check);
}
}