这是该表 DatacolChanged 事件代码:我逐段进行加载数据,都没问题,当时全加载就不行。
Dim dr As DataRow = e.DataRow
Dim t As TimeSpan
If e.DataCol.Name = "计划日期_结束" Orelse e.DataCol.Name = "计划日期_开始" Then
If dr.IsNull("计划日期_结束") Orelse dr.IsNull("计划日期_开始") Then
dr("周期") = Nothing
Else
t = dr("计划日期_结束")-dr("计划日期_开始")
dr("周期") = t.days+ (t.Hours)/24
End If
End If
Dim dt As datatable = DataTables("生产工艺")
Dim str As String = "图号 = '" & dr("图号") & "' And 工序_序号 = '" & dr("工序_序号") & "' And 派工单号 = '" & dr("派工单号") & "' And 状态 = '执行' "
If e.DataCol.Name = "图号" Orelse e.DataCol.Name = "工序_序号" Orelse e.DataCol.Name = "派工单号" Then
Dim r As DataRow = dt.Find(str)
If r IsNot Nothing Then
dr("成本_加工") = (dt.Compute("Sum(成本_加工费元)",str))
dr("成本_工资") = (dt.Compute("Sum(成本_工资元)",str))
dr("工艺工时_准结") = (dt.Compute("Sum(工艺工时_准结)",str))
dr("工艺工时_加工")=(dt.Compute("Sum(工艺工时_加工)",str))
dr("完成工时_准结")=(dt.Compute("Sum(完成工时_准结)",str))
dr("完成工时_加工")=(dt.Compute("Sum(完成工时_加工)",str))
dr("工废损失")=(dt.Compute("Sum(工废损失)",str))
dr("实用工时")=(dt.Compute("Sum(实用工时)",str))
dr("工艺工时_天数")=(dt.Compute("Sum(工艺工时_天数)",str))
dr("完成工时_天数")=(dt.Compute("Sum(完成工时_天数)",str))
End If
End If
Select Case e.DataCol.Name
Case "工艺工时_准结","工艺工时_加工","完成工时_准结","完成工时_加工","工作时间"
dr("完成工时_比例")=(dr("完成工时_准结")+dr("完成工时_加工"))/(dr("工艺工时_准结")+dr("工艺工时_加工"))
Case "周期"
Select Case dr("周期")
Case Nothing
dr("周期比例")= Nothing
Case Else
dr("周期比例")=dr("周期")/dr("工艺工时_天数")
End Select
Case "周期比例"
Select Case dr("周期比例")
Case Nothing
dr("周期情况") = Nothing
Case 0 To 1
dr("周期情况") = "请提前准备"
Case 1.001 To 1.5
dr("周期情况") = "注意进度"
Case 1.501 To 2.5
dr("周期情况") = "正常安排"
Case 2.501 To 1000
dr("周期情况") = "可往后安排"
End Select
Case "完成工时_比例"
Select Case dr("完成工时_比例")
Case 0
Select Case dr("计划日期_结束")
Case Nothing
dr("在线情况") = Nothing
Case Else
dr("在线情况") = "待上线"
End Select
Case 0 To 0.9999
dr("在线情况") = "在线生产"
Case 1
dr("在线情况") = "已完工"
End Select
Case "剩余天数_开始"
Select Case dr("剩余天数_开始")
Case Nothing
dr("开始天数") = Nothing
Case 0 To 1
dr("开始天数") = "今天上线"
Case 1.1 To 2
dr("开始天数") = "明天上线"
Case 2.1 To 3
dr("开始天数") = "后天上线"
Case 3.1 To 5
dr("开始天数") = "3天后上线"
Case 5.1 To 7
dr("开始天数") = "5天后上线"
Case 7.1 To 15
dr("开始天数") = "7天后上线"
Case 15.1 To 30
dr("开始天数") = "半月后上线"
Case 30.1 To 10000
dr("开始天数") = "1个月后上线"
End Select
Case "剩余天数_结束"
Select Case dr("剩余天数_结束")
Case Nothing
dr("结束天数") = Nothing
Case 0 To 1
dr("结束天数") = "今天完工"
Case 1.1 To 2
dr("结束天数") = "明天完工"
Case 2.1 To 3
dr("结束天数") = "后天完工"
Case 3.1 To 5
dr("结束天数") = "5天内完工"
Case 5.1 To 7
dr("结束天数") = "7天内完工"
Case 7.1 To 15
dr("结束天数") = "半月内完工"
Case 15.1 To 30
dr("结束天数") = "1个月内完工"
Case 30.1 To 10000
dr("结束天数") = "1个月后完工"
End Select
End Select
If e.DataCol.Name = "确定" Then '如果是已结帐列的内容变动
If e.NewValue = True Then '而且变动后的值是True(已勾选)
e.DataRow.Locked = True '那么锁定此行
End If
End If
If e.DataCol.name = "图号" Orelse e.DataCol.name = "派工单号" Orelse e.DataCol.name = "工序_序号"
e.DataRow("实际日期_开始") = DataTables("日报表").Compute("min(日期)","[图号] = '" & e.DataRow("图号") & "'and [派工单号] = '" & e.DataRow("派工单号") & "'and [工序_序号] = '" & e.DataRow("工序_序号") & "' ")
e.DataRow("实际日期_结束") = DataTables("日报表").Compute("max(日期)","[图号] = '" & e.DataRow("图号") & "'and [派工单号] = '" & e.DataRow("派工单号") & "'and [工序_序号] = '" & e.DataRow("工序_序号") & "' ")
End If
If e.DataCol.Name = "计划日期_开始" Orelse e.DataCol.Name = "计划日期_结束" Then
If dr.IsNull("计划日期_开始") Orelse dr.IsNull("计划日期_结束") Then
dr("剩余天数_结束") = Nothing
dr("剩余天数_开始") = Nothing
Else
dr("剩余天数_结束") = DateDiff("h",Date.Today.Now,dr("计划日期_结束"))/24
dr("剩余天数_开始") = DateDiff("h",Date.Today.Now,dr("计划日期_开始"))/24
End If
End If
If e.DataCol.Name = "图号" Orelse e.DataCol.Name = "派工单号" Then
Dim dr3 As DataRow = DataTables("生产目录").Find("[图号] = '" & e.DataRow("图号") & "' And [派工单号] = '" & e.DataRow("派工单号") & "' ")
If dr3 IsNot Nothing Then
e.DataRow("到料数量") = dr3("到料数量")
e.DataRow("计划数量") = dr3("计划数量")
e.DataRow("交货情况") = dr3("交货情况")
Else
e.DataRow("到料数量") = Nothing
e.DataRow("计划数量") = Nothing
e.DataRow("交货情况") = Nothing
End If
End If
If e.DataCol.Name = "图号" Orelse e.DataCol.Name = "工序_序号" Then
Dim dr2 As DataRow = DataTables("产品工序").Find("[图号] = '" & e.DataRow("图号") & "'And [工序_序号] = '" & e.DataRow("工序_序号") & "' ")
If dr2 IsNot Nothing Then
e.DataRow("图名") = dr2("图名")
e.DataRow("工序号") = dr2("工序号")
e.DataRow("机型") = dr2("机型")
e.DataRow("所属部分") = dr2("所属部分")
e.DataRow("名称") = dr2("名称")
e.DataRow("工序_班组") = dr2("工序_班组")
e.DataRow("工序_简要提示") = dr2("工序_简要提示")
e.DataRow("备注") = dr2("备注")
e.DataRow("照片") = dr2("照片")
e.DataRow("确定") = dr2("确定")
Else
e.DataRow("图名") = Nothing
e.DataRow("工序号") = Nothing
e.DataRow("机型") = Nothing
e.DataRow("所属部分") = Nothing
e.DataRow("名称") = Nothing
e.DataRow("工序_班组") = Nothing
e.DataRow("工序_简要提示") = Nothing
e.DataRow("备注") = Nothing
e.DataRow("照片") = Nothing
e.DataRow("确定") = Nothing
End If
End If
If e.DataCol.Name = "图号" Orelse e.DataCol.Name = "工序_序号" Orelse e.DataCol.Name = "派工单号" Then
If dr.IsNull("图号") Orelse dr.IsNull("派工单号") Orelse dr.IsNull("工序_序号") Orelse dr.IsNull("工艺工时_天数") Orelse dr("状态") = "暂停" Then
dr("计划日期_结束") = Nothing
dr("计划日期_开始") = Nothing
Else
Dim pr As DataRow = DataTables("生产目录").Find("[图号] = '" & e.DataRow("图号") & "'And [派工单号] = '" & e.DataRow("派工单号") & "' ")
Dim Sum As Double = Tables("生产工序").Compute("Sum(工艺工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [状态]= '执行' And [工序_序号] <= " & dr("工序_序号"))
Dim Sum1 As Double = Tables("生产工序").Compute("Sum(工艺工时_天数)","[图号] = '" & dr("图号") & "' And [派工单号] = '" & dr("派工单号") & "' And [状态]= '执行' And [工序_序号] >= " & dr("工序_序号"))
If pr Is Nothing Then
dr("计划日期_结束") = Nothing
dr("计划日期_开始") = Nothing
Else
If pr.IsNull("生产周期") Orelse pr.IsNull("工艺工时_天数") Then
dr("计划日期_结束") = Nothing
dr("计划日期_开始") = Nothing
Else
dr("计划日期_结束") = pr("到料日期").AddDays(Sum * (pr("生产周期")/pr("工艺工时_天数")))
dr("计划日期_开始") = pr("完工日期").AddDays(-Sum1 * (pr("生产周期")/pr("工艺工时_天数"))+0.5)
End If
End If
End If
End If