楼主,你功能分类表的DataColChanged事件代码非常糟糕,DataColChanged事件通常只处理发生变化的行,而你的代码处理表中所有的行。
如果你有1万行,某行发生变化,常规的DataColChanged代码就是处理此行而已,而你却要处理整个1万行。如果执行RaseDtaColChanged事件的话,等于就处理了1万*1万,也就是1亿次。
也就是说,你目前的代码,效率比常规差了一万倍,不慢是不正常的。
我帮你将代码稍微改看一下,细节你再自己调整,修改后你会发现,下载刷新一次是瞬间完成的:
If e.DataCol.Name = "功能分类_代码" Then
Dim dr,dr0,dr1 As DataRow
dr = e.DataRow
If dr("功能分类_代码").length= 3
dr("科目全称") = dr("功能分类_科目名称")
dr("功能分类_类") = dr("功能分类_代码") & ":" & dr("功能分类_科目名称")
ElseIf dr("功能分类_代码").length = 5
dr0 = DataTables("功能分类").Find("[功能分类_代码] = '" & left(dr("功能分类_代码"),3) & "'")
If dr0 IsNot Nothing
dr("科目全称") = dr0("功能分类_科目名称") & "-" & dr("功能分类_科目名称")
dr("功能分类_类") = dr0("功能分类_代码") & ":" & dr0("功能分类_科目名称")
dr("功能分类_款") = dr("功能分类_代码") & ":" & dr("功能分类_科目名称")
End If
ElseIf dr("功能分类_代码").length = 7
dr0 = DataTables("功能分类").Find("[功能分类_代码] = '" & left(dr("功能分类_代码"),3) & "'")
dr1 = DataTables("功能分类").Find("[功能分类_代码] = '" & left(dr("功能分类_代码"),5) & "'")
If dr1 IsNot Nothing
dr("科目全称") = dr0("功能分类_科目名称") & "-" & dr1("功能分类_科目名称") & "-" & dr("功能分类_科目名称")
dr("功能分类_类") = dr0("功能分类_代码") & ":" & dr0("功能分类_科目名称")
dr("功能分类_款") = dr1("功能分类_代码") & ":" & dr1("功能分类_科目名称")
dr("功能分类_项") = dr("功能分类_代码") & ":" & dr("功能分类_科目名称")
End If
End If
End If
DataColChanged事件代码是FoxTable的核心,非常重要,一个项目的大部分代码会写在这里,务必要了解其作用原理。
另科目名称不能自动更新是什么意思?
[此贴子已经被作者于2011-4-10 17:20:41编辑过]