大概思路
1、获取最底层:在上阶序号里不存在的序号就是最底层
Dim drs As List(of DataRow) = DataTables("BOM清单").SQLSelect("序号 not in (select 上阶序号 from {BOM清单} where 上阶序号 is not null)")
Output.Show(drs.Count)
2、遍历上面所有行,通过上阶序号查询,获取这个上阶序号有几行下一层
for each dr as datarow in drs
Dim drs2 As List(of DataRow) = DataTables("BOM清单").Select("上阶序号=" & dr("上阶序号"))
计算drs2这些行的各种值(比如当阶材料成本等)求和
查询序号=上阶序号的数据:dim dr2 as datarow = DataTables("BOM清单").find("序号=" & dr("上阶序号"))
dr2("当阶材料成本") = 上面计算的求和结果
同样方法递归处理drs2各行的上一层
next
比如序号为6为最底层,其上阶序号为5,上阶序号为5的行只有序号为6这一行,计算序号为6这一行当阶材料成本等写入序号为5这一行的当阶材料成本列;
继续向上处理,序号为5的上阶序号为4,上阶序号为4的行有序号为5、7、8这3行,那么就计算5、7、8这3行的材料成本写入序号为4这一行的当阶材料成本列;
继续向上处理,序号为4的上阶序号为3,..............