你的逻辑关系我们有看懂:
If e.DataCol.Name = "物料代码" Then '如果内容发生变动的是品名列
If e.NewValue Is Nothing Then '如果新值是空白,也就是品名列的内容为空
e.DataRow("加权平均单价") = Nothing '那么清空此行单价列的内容,这里我明白
Else
Dim db As DataRow
'否则在产品表查找同名的产品行,将找到的行赋值给变量dr
db = DataTables("库存材料表").Find("[物料代码] = '" & e.NewValue & "'") ‘ 从库存材料表找出相同代码的行
Dim dw As DataRow = e.DataTable.DataRows(e.DataTable.DataRows.Count - 1) '获得本表(材料发放表)最后一行,不管此行物料代码是否和当前行相同
If db IsNot Nothing Then '如果找到了同名的产品行,也就是dr不是Nothing ’如果库存材料存在此物料代码的行
e.DataRow("加权平均单价") = dw("加权平均单价") '当前行的平均单价等于最后一行的平均单价,不管二者物料代码是否和当前行相同
End If
End If
End If
上面红色的部分逻辑显然不对,材料发放表的新增行可能就是最后一行,怎么会取最后一行的平均单价? 例如我新增一行,最后一行就是新增行自己,自己取自己的平均单价,意义何在?
这里的库存材料表的作用又是什么?
你要理清楚逻辑,业务逻辑只有你自己懂。