老师:以下是工单执行反馈表的所有事件代码,切换到此表时,打开特别慢,大概30至60秒的样子,请老师帮我分析下,以下代码如何简化或放在别的位置?
工单执行反馈_ValidateEdit
If
e.Col.DroppedDown Then '如果下拉窗口已经打开
e.Col.CloseDropDown() '则关闭下拉窗口
End If
工单执行反馈_ChangeEdit
If e.Col.Name =
"需求号" Then '如果编辑的是客户ID列
If e.Col.DroppedDown Then '如果下拉窗口已经打开
Dim tbl As Table = Tables("查找需求任务_任务执行进度")
If e.Text = "" Then '如果内容为空
tbl.Filter = "" '显示所有客户
Else '否则根据输入内容进行模糊筛选
Dim txt As String = "'%"
& e.Text & "%'"
tbl.Filter = "需求号 Like "
& txt & " Or 站点名称 Like " & txt & " Or 站号 Like
" & txt
End If
End If
End If
工单执行反馈_KeyPressEdit
If e.Col.Name =
"需求号" Then '如果编辑的是客户ID列
If e.Col.DroppedDown = False '且下拉窗口没有打开
e.Col.OpenDropDown() '打开下拉窗口
End If
End If
工单执行反馈_KeyDownEdit
If e.Col.Name =
"需求号" Then '如果编辑的是客户 ID列
If e.Col.DroppedDown Then '如果下拉窗口已经打开
Dim tbl As Table = Tables("查找需求任务_任务执行进度")
If e.KeyCode = Keys.Up Then '如果按下的是上箭头按键
tbl.Position = tbl.Position - 1 '向上移动一行
e.Cancel = True
ElseIf e.KeyCode = Keys.Down Then '如果按下的是下箭头按键
tbl.Position = tbl.Position + 1 '向下移动一行
e.Cancel = True
End If
End If
End If
工单执行反馈_DataColChanged
'跨表引用
If e.DataCol.Name
= "需求号" Then
Dim nms() As String = {"站点名称","项目类型"}
If e.NewValue Is Nothing Then
For Each nm As String In nms
e.DataRow(nm) = Nothing
Next
Else
Dim dr As DataRow
dr = DataTables("任务执行进度").Find("[需求号]
= '" & e.NewValue & "'")
If dr IsNot Nothing
For Each nm As String In nms
e.DataRow(nm) = dr(nm)
Next
End If
End If
End If
'自动编号
Select
e.DataCol.Name
Case
"工单日期","项目类型"
If e.DataRow.IsNull("工单日期")
OrElse e.DataRow.IsNull("项目类型") Then
e.DataRow("工单编号") =
Nothing
Else
Dim
d As Date = e.DataRow("工单日期")
Dim y As Integer = d.Year
Dim m As Integer = d.Month
Dim
Days As Integer =
Date.DaysInMonth(y,m)
Dim fd As Date = New
Date(y,m,1) '获得该月的第一天
Dim ld As Date = New
Date(y,m,Days) '获得该月的最后一天
Dim bh As String = e.DataRow("项目类型")
& "-" & Format(d,"yyyyMM") & "-" '生成编号的前缀
If e.DataRow("工单编号").StartsWith(bh)
= False '如果单据编号前缀不符
Dim max As String
Dim idx As Integer
Dim flt As String
flt = "项目类型 = '"& e.DataRow("项目类型")
& "' And 工单日期 >= #" & fd & "# And
工单日期 <= #" & ld & "# And [_Identify] <>
" & e.DataRow("_Identify")
max = e.DataTable.Compute("Max(工单编号)",flt) '取得该月的相同工程代码的最大单据编号
If max > ""
Then '如果存在最大单据编号
idx =
CInt(max.SubString(12,3)) + 1 '获得最大单据编号的后3位顺序号,并加1
Else
idx = 1 '否则顺序号等于1
End If
e.DataRow("工单编号") =
bh & Format(idx,"000")
End If
End
If
End Select
'进度根据条件判断
Select
e.DataCol.Name
Case
"执行日期","执行信息","照片文件","需求号"
If e.DataRow.Isnull ("需求号") =
False
If e.DataRow.IsNull("执行日期")
OrElse e.DataRow.IsNull("执行信息") OrElse e.DataRow.IsNull("照片文件") Then
e.DataRow("工单状态") =
"未完成"
Else
e.DataRow("工单状态") =
"已完成,待审核"
End If
End If
End Select
If
e.DataRow("审核") = "审核通过" Then
e.DataRow("工单状态")="已完成"
Else If
e.DataRow("审核")="审核未通过" Then
e.DataRow("工单状态")="请重新反馈"
End If
'自动写入当前日期
Select Case
e.DataCol.name
Case "审核人"
If e.DataRow.IsNull("审核人")
Then
e.DataRow("审核日期") =
Nothing
Else
e.DataRow("审核日期") =
Date.Today
End
If
End
Select
'根据条件跨表判断进度
Select Case e.DataCol.Name
Case "需求号","站点名称","工单类型","工单状态","审核"
If e.DataRow.IsNull("需求号")=False
AndAlso e.DataRow.IsNull("站点名称")=False AndAlso e.DataRow.IsNull("工单类型")=False
Dim s As String = Nothing
If e.DataRow("工单状态")="已完成"
AndAlso e.DataRow("审核")="审核通过" Then
s = "已完成"
Else
s = "未完成"
End If
DataTables("任务执行进度").ReplaceFor(e.DataRow("工单类型"),
s ,"需求号='" & e.DataRow("需求号") & "' and 站点名称='"
& e.DataRow("站点名称") & "'")
End If
End Select '