Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
由于涉及产品的变化,有一些判定用代码要经常做修改,故统一放在表“ABC”的“第三列”备注列中。
但现在要引用参与运算时不时什么处理,请高手指点。
如:Tables("ABC").Rows(0)("第三列") 的备注内容为:dt.Compute("Count(姓名)", dr("科目") & " > 0 And [期数] = '" & e.Datarow("期数") & "'And [班级] = '" & e.Datarow("班级") & "'" )
下列代码可运行:
Dim dr As DataRow = e.DataRow
Dim dt As DataTable =DataTables("成绩表")
If e.DataCol.Name = "科目" And e.DataRow.IsNull("科目") = False Then
Dim CC As String = dt.Compute("Count(姓名)", dr("科目") & " > 0 And [期数] = '" & e.Datarow("期数") & "'And [班级] = '" & e.Datarow("班级") & "'" )
e.DataRow("参考人数") = CC '“参考人数” 列为整数列
End If
但要是用引用就不行,什么处理?提示数据列转换错误。
Dim dr As DataRow = e.DataRow
Dim dt As DataTable =DataTables("成绩表")
If e.DataCol.Name = "科目" And e.DataRow.IsNull("科目") = False Then
Dim CC As String = Tables("ABC").Rows(0)("第三列") '引用备注列的内容
e.DataRow("参考人数") = CC
'想达到以下的运行效果:e.DataRow("参考人数") = dt.Compute("Count(姓名)", dr("科目") & " > 0 And [期数] = '" & e.Datarow("期数") & "'And [班级] = '" & e.Datarow("班级") & "'" )
End If
代码不是表达式,代码是需要编译才能运行的,你变化的只是条件表达式,并非代码本身,你可以在代码中动态合成表达式。
经常要改的代码是涉及产品的多方面参数的变化,条件变化会比较多,只好想这样的方法去处理。
有什么方法可以取备注列代码内容转换成可运行的代码?
对动态函数管理不太会,请再指点:
如:Tables("ABC").Rows(0)("第三列") 的备注内容为:dt.Compute("Count(姓名)", dr("科目") & " > 0 And [期数] = '" & e.Datarow("期数") & "'And [班级] = '" & e.Datarow("班级") & "'" )
动态函数名为“ABC” ,以下是参照帮助写的,实在写不好。
Dim Code As String
Code = Tables("ABC").Rows(0)("第三列") & vbcrlf
Code = Code & "Return "
Functions.Add("ABC",Code)
Functions.Complie()
DataColChanged中这样写:
Dim dr As DataRow = e.DataRow
Dim dt As DataTable =DataTables("成绩表")
If e.DataCol.Name = "科目" And e.DataRow.IsNull("科目") = False Then
e.DataRow("参考人数") = Functions.Execute("ABC")
End If
你要传递参数过去的,e.DataRow,dr,dt等等,都应该作为参数传递过去。
不如直接在函数管理中定义好,测试通过后,将函数的代码复制到某个备注列,再删除这个函数,以后启动项目后,就从备注列读取代码并编译。
实在不会写就算了吧,你这个想法其实没有实际价值的,动态合成表达式好得多。
谢谢,再想想看要什么弄