///
/// 递归展开Bom
///
/// 所有数据集
/// 根节点物料
/// 根树节点
private void ResolveSubTree(DbSetlistBom, TbBom bom, TreeNode treeNode)
{
//获取所有bom节点物料代码为父节点代码的物料
ListsubListClone = listBom.Where(p => p.ParentPartNo == bom.PartNo).ToList();
//获取所有bom节点物料代码为父节点代码的物料(过滤重复物料,用作循环)
var subList = listBom.Where(p => p.ParentPartNo == bom.PartNo).GroupBy(p => p.PartNo).Select(p => p.FirstOrDefault()).ToList();
//如果包含子节点
if (subList.Count > 0)
{
//树展开
treeNode.Expanded = false;
//循环遍历子节点
foreach (TbBom subBom in subList)
{
//查询出 子节点,和 当前父节点下 子节点的数量汇总
var sbom = new { b = subBom, c = subListClone.Where(p => p.PartNo == subBom.PartNo).Select(p => p.Qty).Sum() };
//创建节点
TreeNode node = new TreeNode();
node.Value = sbom.b.PartNo;
node.ToolTip = GetParentNodeNames(listBom, bom.ParentNos);
treeNode.ChildNodes.Add(node);
if (Valied(bom.ParentNos, sbom.b.PartNo))
{
node.ImageUrl = "~\\image\\flase.gif";
node.Text = string.Format("{0}", sbom.b.MaterialName);
continue;
}
else
{
node.ImageUrl = "~\\image\\true.gif";
node.Text = string.Format("{0}({1})", sbom.b.MaterialName, sbom.c);
}
ResolveSubTree(listBom, subBom, node);
}
}
}