以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 关于表事件代码的失效问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=194799) |
-- 作者:刘效功天津 -- 发布时间:2025/1/15 17:51:00 -- 关于表事件代码的失效问题 老师好,咱们这几天专攻的跨表引用数据排列组合问题,是在窗口中作了一个命令,,点击命令按钮后,例如:在 表C中 能够从 表A中提取数据 自动加载到表C中,这些加载的数据是关键数据,它触发datacolchanged事件,引起表C的后面许多列的各种判断计算 ,原先是采用手动加载数据,例如点击门窗代号,就只加载这个门窗代号的相关数据,现在是自动化的全部加载数据,但是问题是,加载完数据后,表C 的表事件 datacolchanged事件中的代码失效了,后面的各种计算都没有进行,这也不知是咋回事,请老师指点一下,谢谢老师 |
-- 作者:有点蓝 -- 发布时间:2025/1/16 8:40:00 -- datacolchanged事件中的什么代码? |
-- 作者:刘效功天津 -- 发布时间:2025/1/16 9:04:00 -- 老师好,例如咱们这几天您帮忙写的代码,功能是实现了,但是原先的表事件好像都失效了,因为咱们这几天写的代码就是为了自动加载数据,原先是手动一个一个窗型代号加载的数据,这些加载的数据在表中是关键数据,后面的相关数据都是根据这些加载的数据进行逻辑运算的,现在加载完数据,后面就没有运算,而且点击刷新重置列,也不起作用,不知是咋回事,下面举例说明一下啊 例如,门窗玻璃表 咱们在窗口中设置了一个自动加载数据的按钮,代码如下 \'定义自动生成分格排列组合代码 MessageBox.Show("正在数据加载,请耐心等候") Dim dr As DataRow Dim pfs() As String = {"宽度第1分格1", "宽度第2分格1", "宽度第3分格1"} Dim lfs() As String = {"高度第一分格1", "高度第二分格1", "高度第三分格1", "高度第四分格1"} For Each drc As DataRow In DataTables("门窗信息").select("[门窗代号] is not null") Dim filter As String = "[区域划分] =\'" & drc("区域划分") & "\' AND [楼栋代号] =\'" & drc("楼栋代号") & "\' AND [门窗代号] =\'" & drc("门窗代号") & "\'" dr = DataTables("门窗玻璃").find(filter)\'设置重复加载数据的代码 If dr Is Nothing Then For i1 As Integer = 0 To pfs.count - 1 For i2 As Integer = 0 To lfs.count - 1 \'设置数据排列组合填充代码 Dim r As Row = Tables("门窗玻璃").addnew r("门窗代号") = drc("门窗代号") r("区域划分") = drc("区域划分") r("楼栋代号") = drc("楼栋代号") r("门窗数量") = drc("门窗数量") r("窗型图") = drc("窗型图") r("宽度分格1") = drc (pfs(i1)) r("高度分格1") = drc (lfs(i2)) Dim s1 As String = pfs(i1).TrimEnd("1") r("宽度分格2") = drc(s1 & "2") r("宽度分格3") = drc(s1 & "3") r("宽度分格4") = drc(s1 & "4") r("宽度分格5") = drc(s1 & "5") r("宽度分格6") = drc(s1 & "6") r("宽度分格7") = drc(s1 & "7") r("宽度分格8") = drc(s1 & "8") r("宽度分格9") = drc(s1 & "9") r("宽度分格A") = drc(s1 & "A") r("宽度分格B") = drc(s1 & "B") Dim s2 As String = lfs(i2).TrimEnd("1") r("高度分格2") = drc(s2 & "2") r("高度分格3") = drc(s2 & "3") r("高度分格4") = drc(s2 & "4") r("高度分格5") = drc(s2 & "5") r("高度分格6") = drc(s2 & "6") r("高度分格7") = drc(s2 & "7") r("高度分格8") = drc(s2 & "8") r("高度分格9") = drc(s2 & "9") r("高度分格A") = drc(s2 & "A") r("高度分格B") = drc(s2 & "B") Next Next \'设置排除不符合条件的数据行代码 Dim int1 As Integer = DataTables("门窗玻璃").GetValues("宽度分格1", filter).count Dim int2 As Integer = DataTables("门窗玻璃").GetValues("高度分格1", filter).count Dim max1 As Integer = DataTables("门窗玻璃").Compute("max([宽度分格2])", filter) Dim max2 As Integer = DataTables("门窗玻璃").Compute("max([高度分格2])", filter) If int1 = 1 And int2 > 2 Then DataTables("门窗玻璃").DeleteFor(filter & " and 高度分格2=" & max2) ElseIf int1 > 2 And int2 = 1 Then DataTables("门窗玻璃").DeleteFor(filter & " and 宽度分格2=" & max1) ElseIf int1 > 2 And int2 > 2 Then DataTables("门窗玻璃").DeleteFor(filter & " and 宽度分格2=" & max1 & " and 高度分格2=" & max2) End If End If Next DataTables("门窗玻璃").DeleteFor("[宽度分格1] is null or [高度分格1] is null") 在门窗玻璃表事件DataCloChanged事件中有如下代码(这些代码原来测试都没问题) \'从门窗表跨表引用数据的代码 If e.DataCol.Name = "门窗代号" Then Dim nm2s() As String = {"区域划分","楼栋代号","窗型图","门窗数量"} If e.NewValue Is Nothing Then For Each nm2 As String In nm2s e.DataRow(nm2) = Nothing Next Else Dim dr22 As DataRow dr22 = DataTables("门窗表").Find("[门窗代号] = \'" & e.NewValue & "\'") If dr22 IsNot Nothing For Each nm2 As String In nm2s e.DataRow(nm2) = dr22(nm2) Next End If End If End If \'设置制动增加行代码 DataTables("门窗玻璃").AllowAddNew=True \'控制显示代码 Select Case e.DataCol.name Case "门窗代号" If e.NewValue Is Nothing Then e.DataRow("宽度分格1") = Nothing e.DataRow("宽度分格2") = Nothing e.DataRow("宽度分格3") = Nothing e.DataRow("宽度分格4") = Nothing e.DataRow("宽度分格5") = Nothing e.DataRow("宽度分格6") = Nothing e.DataRow("宽度分格7") = Nothing e.DataRow("宽度分格8") = Nothing e.DataRow("宽度分格9") = Nothing e.DataRow("宽度分格A") = Nothing e.DataRow("宽度分格B") = Nothing e.DataRow("高度分格1") = Nothing e.DataRow("高度分格2") = Nothing e.DataRow("高度分格3") = Nothing e.DataRow("高度分格4") = Nothing e.DataRow("高度分格5") = Nothing e.DataRow("高度分格6") = Nothing e.DataRow("高度分格7") = Nothing e.DataRow("高度分格8") = Nothing e.DataRow("高度分格9") = Nothing e.DataRow("高度分格A") = Nothing e.DataRow("高度分格B") = Nothing End If End Select \'宽度分格代号下拉列表项目--根据行数据进行下拉列表---及自动填充数据代码 \'高度分格代号下拉列表项目--根据行数据进行下拉列表---及自动填充数据代码 Select Case e.DataCol.name Case "宽度分格1" If e.NewValue Is Nothing Then e.DataRow("宽度分格2") = Nothing e.DataRow("宽度分格3") = Nothing e.DataRow("宽度分格4") = Nothing e.DataRow("宽度分格5") = Nothing e.DataRow("宽度分格6") = Nothing e.DataRow("宽度分格7") = Nothing e.DataRow("宽度分格8") = Nothing e.DataRow("宽度分格9") = Nothing e.DataRow("宽度分格A") = Nothing e.DataRow("宽度分格B") = Nothing Else Dim dr As DataRow dr = DataTables("门窗信息").find("[门窗代号] = \'" & e.DataRow("门窗代号") & "\'" ) If dr IsNot Nothing Dim s As String = e.DataCol.name.trim("1") Dim s2 As String Select Case e.NewValue Case dr("宽度第1分格1") s2 = "宽度第1分格" Case dr("宽度第2分格1") s2 = "宽度第2分格" Case dr("宽度第3分格1") s2 = "宽度第3分格" Case dr("宽度第4分格1") s2 = "宽度第4分格" Case dr("宽度第5分格1") s2 = "宽度第5分格" Case dr("宽度第6分格1") s2 = "宽度第6分格" Case dr("宽度第7分格1") s2 = "宽度第7分格" Case dr("宽度第8分格1") s2 = "宽度第8分格" Case dr("宽度第9分格1") s2 = "宽度第9分格" End Select e.DataRow(s & "2") = dr(s2 & "2") e.DataRow(s & "3") = dr(s2 & "3") e.DataRow(s & "4") = dr(s2 & "4") e.DataRow(s & "5") = dr(s2 & "5") e.DataRow(s & "6") = dr(s2 & "6") e.DataRow(s & "7") = dr(s2 & "7") e.DataRow(s & "8") = dr(s2 & "8") e.DataRow(s & "9") = dr(s2 & "9") e.DataRow(s & "A") = dr(s2 & "A") e.DataRow(s & "B") = dr(s2 & "B") End If End If Case "高度分格1" If e.NewValue Is Nothing Then e.DataRow("高度分格2") = Nothing e.DataRow("高度分格3") = Nothing e.DataRow("高度分格4") = Nothing e.DataRow("高度分格5") = Nothing e.DataRow("高度分格6") = Nothing e.DataRow("高度分格7") = Nothing e.DataRow("高度分格8") = Nothing e.DataRow("高度分格9") = Nothing e.DataRow("高度分格A") = Nothing e.DataRow("高度分格B") = Nothing Else Dim dr1 As DataRow dr1 = DataTables("门窗信息").find("[门窗代号] = \'" & e.DataRow("门窗代号") & "\'" ) If dr1 IsNot Nothing Dim T As String = e.DataCol.name.trim("1") Dim T2 As String Select Case e.NewValue Case dr1("高度第一分格1") T2 = "高度第一分格" Case dr1("高度第二分格1") T2 = "高度第二分格" Case dr1("高度第三分格1") T2 = "高度第三分格" Case dr1("高度第四分格1") T2 = "高度第四分格" Case dr1("高度第五分格1") T2 = "高度第五分格" Case dr1("高度第六分格1") T2 = "高度第六分格" Case dr1("高度第七分格1") T2 = "高度第七分格" Case dr1("高度第八分格1") T2 = "高度第八分格" Case dr1("高度第九分格1") T2 = "高度第九分格" End Select e.DataRow(T & "2") = dr1(T2 & "2") e.DataRow(T & "3") = dr1(T2 & "3") e.DataRow(T & "4") = dr1(T2 & "4") e.DataRow(T & "5") = dr1(T2 & "5") e.DataRow(T & "6") = dr1(T2 & "6") e.DataRow(T & "7") = dr1(T2 & "7") e.DataRow(T & "8") = dr1(T2 & "8") e.DataRow(T & "9") = dr1(T2 & "9") e.DataRow(T & "A") = dr1(T2 & "A") e.DataRow(T & "B") = dr1(T2 & "B") End If End If End Select \'定义引用--参数表中---型材控制参数(型材代号,型材计算参数,型材线密度)--代码,目的是,在各种判断逻辑条件下 为后面型材计算时提供解决方案,后续具备可扩展的功能 Select Case e.DataCol.name Case "门窗代号" If e.DataRow("门窗代号") =Nothing Then e.DataRow("计算参数1")=Nothing \'设置边框计算参数显示模式 e.DataRow("计算参数2")=Nothing \'设置中挺计算参数显示模式 e.DataRow("计算参数3")=Nothing \'设置加强中挺计算参数显示模式 e.DataRow("换向料参数1")=Nothing \'设置型材代号显示模式 e.DataRow("换向料参数2")=Nothing \'设置计算参数显示模式 e.DataRow("换向料参数3")=Nothing \'设置线密度显示模式 e.DataRow("内开扇参数1")=Nothing e.DataRow("内开扇参数2")=Nothing e.DataRow("内开扇参数3")=Nothing e.DataRow("外开扇参数1")=Nothing e.DataRow("外开扇参数2")=Nothing e.DataRow("外开扇参数3")=Nothing e.DataRow("框挺扣条参数1")=Nothing e.DataRow("框挺扣条参数2")=Nothing e.DataRow("框挺扣条参数3")=Nothing e.DataRow("内开扇扣条参数1")=Nothing e.DataRow("内开扇扣条参数2")=Nothing e.DataRow("内开扇扣条参数3")=Nothing e.DataRow("外开扇扣条参数1")=Nothing e.DataRow("外开扇扣条参数2")=Nothing e.DataRow("外开扇扣条参数3")=Nothing e.DataRow("传动条参数1")=Nothing e.DataRow("传动条参数2")=Nothing e.DataRow("内开扇角码参数1")=Nothing e.DataRow("内开扇角码参数2")=Nothing e.DataRow("内开扇角码参数3")=Nothing e.DataRow("外开扇角码参数1")=Nothing e.DataRow("外开扇角码参数2")=Nothing e.DataRow("外开扇角码参数3")=Nothing e.DataRow("玻璃间隙")=Nothing e.DataRow("外开扇搭接")=Nothing e.DataRow("内开扇搭接")=Nothing e.DataRow("玻璃种类")=Nothing e.DataRow("是否钢化")=Nothing e.DataRow("固定玻璃扣条11")=Nothing e.DataRow("固定玻璃扣条12")=Nothing e.DataRow("固定玻璃扣条13")=Nothing e.DataRow("平开窗合页2")=Nothing e.DataRow("风撑2")=Nothing Else \'定义--参数代码---边框,边框角码型材的代号,计算参数,线密度--代码 Dim aa0 As Integer Dim bb0 As Integer Dim cc0 As Integer Dim drr01 As DataRow=DataTables("参数表").Find("[型材名称]=\'边框\'") aa0=drr01("计算参数") e.DataRow("计算参数1")=aa0 Dim drr02 As DataRow=DataTables("参数表").Find("[型材名称]=\'中挺\'") bb0=drr02("计算参数") e.DataRow("计算参数2")=bb0 Dim drr03 As DataRow=DataTables("参数表").Find("[型材名称]=\'加强中挺\'") cc0=drr03("计算参数") e.DataRow("计算参数3")=cc0 \'定义--参数代码---换向料的代号,计算参数,线密度--代码 Dim aa1 As String Dim bb1 As Integer Dim cc1 As Double Dim drr1 As DataRow=DataTables("参数表").Find("[型材名称]=\'换向料\'") aa1=drr1("型材代号") bb1=drr1("计算参数") cc1=drr1("线密度") e.DataRow("换向料参数1")=aa1 e.DataRow("换向料参数2")=bb1 e.DataRow("换向料参数3")=cc1 \'定义--参数代码---内开扇的代号,计算参数,线密度--代码 Dim aa2 As String Dim bb2 As Integer Dim cc2 As Double Dim drr2 As DataRow=DataTables("参数表").Find("[型材名称]=\'内开扇\'") aa2=drr2("型材代号") bb2=drr2("计算参数") cc2=drr2("线密度") e.DataRow("内开扇参数1")=aa2 e.DataRow("内开扇参数2")=bb2 e.DataRow("内开扇参数3")=cc2 \'定义--参数代码---外开扇的代号,计算参数,线密度--代码 Dim aa3 As String Dim bb3 As Integer Dim cc3 As Double Dim drr3 As DataRow=DataTables("参数表").Find("[型材名称]=\'外开扇\'") aa3=drr3("型材代号") bb3=drr3("计算参数") cc3=drr3("线密度") e.DataRow("外开扇参数1")=aa3 e.DataRow("外开扇参数2")=bb3 e.DataRow("外开扇参数3")=cc3 \'定义--参数代码---框挺扣条的代号,计算参数,线密度--代码 Dim aa4 As String Dim bb4 As Integer Dim cc4 As Double Dim drr4 As DataRow=DataTables("参数表").Find("[型材名称]=\'框挺扣条\'") aa4=drr4 ("型材代号") bb4=drr4 ("计算参数") cc4=drr4 ("线密度") e.DataRow("框挺扣条参数1")=aa4 e.DataRow("框挺扣条参数2")=bb4 e.DataRow("框挺扣条参数3")=cc4 \'定义--参数代码---内开扇扣条的代号,计算参数,线密度--代码 Dim aa5 As String Dim bb5 As Integer Dim cc5 As Double Dim drr5 As DataRow=DataTables("参数表").Find("[型材名称]=\'内开扇扣条\'") aa5=drr5("型材代号") bb5=drr5("计算参数") cc5=drr5("线密度") e.DataRow("内开扇扣条参数1")=aa5 e.DataRow("内开扇扣条参数2")=bb5 e.DataRow("内开扇扣条参数3")=cc5 \'定义--参数代码---外开扇扣条的代号,计算参数,线密度--代码 Dim aa6 As String Dim bb6 As Integer Dim cc6 As Double Dim drr6 As DataRow=DataTables("参数表").Find("[型材名称]=\'外开扇扣条\'") aa6=drr6("型材代号") bb6=drr6("计算参数") cc6=drr6("线密度") e.DataRow("外开扇扣条参数1")=aa6 e.DataRow("外开扇扣条参数2")=bb6 e.DataRow("外开扇扣条参数3")=cc6 \'定义--参数代码---内开扇角码的代号,计算参数,线密度--代码 Dim aa7 As String Dim bb7 As Integer Dim cc7 As Double Dim drr7 As DataRow=DataTables("参数表").Find("[型材名称]=\'内开扇角码\'") aa7=drr7("型材代号") bb7=drr7("计算参数") cc7=drr7("线密度") e.DataRow("内开扇角码参数1")=aa7 e.DataRow("内开扇角码参数2")=bb7 e.DataRow("内开扇角码参数3")=cc7 \'定义--参数代码---外开扇角码的代号,计算参数,线密度--代码 Dim aa8 As String Dim bb8 As Integer Dim cc8 As Double Dim drr8 As DataRow=DataTables("参数表").Find("[型材名称]=\'外开扇角码\'") aa8=drr8("型材代号") bb8=drr8("计算参数") cc8=drr8("线密度") e.DataRow("外开扇角码参数1")=aa8 e.DataRow("外开扇角码参数2")=bb8 e.DataRow("外开扇角码参数3")=cc8 \'定义--参数代码---传动条的代号,线密度--代码 Dim aa9 As String Dim cc9 As Double Dim drr9 As DataRow=DataTables("参数表").Find("[型材名称]=\'传动条\'") aa9=drr9("型材代号") cc9=drr9("线密度") e.DataRow("传动条参数1")=aa9 e.DataRow("传动条参数2")=cc9 \'定义--参数代码---玻璃与铝框之间间隙参数--代码 Dim aa10 As Integer Dim drr10 As DataRow=DataTables("参数表").Find("[配合参数1]=\'玻璃与铝框之间总间隙\'") aa10=drr10("配合参数2") e.DataRow("玻璃间隙")=aa10 \'定义--参数代码---外开扇搭接尺寸--代码 Dim aa11 As Integer Dim drr11 As DataRow=DataTables("参数表").Find("[配合参数1]=\'外开扇搭接总尺寸\'") aa11=drr11("配合参数2") e.DataRow("外开扇搭接")=aa11 \'定义--参数代码---外开扇搭接尺寸--代码 Dim aa12 As Integer Dim drr12 As DataRow=DataTables("参数表").Find("[配合参数1]=\'内开扇搭接总尺寸\'") aa12=drr12("配合参数2") e.DataRow("内开扇搭接")=aa12 End If End Select \'定义各种下拉列表显示模式 Select Case e.DataCol.name Case "宽度分格1","高度分格1" If e.DataRow("宽度分格1") =Nothing Or e.DataRow("高度分格1") =Nothing Then e.DataRow("玻璃种类")=Nothing \'设置玻璃种类显示模式 e.DataRow("是否钢化")=Nothing \'设置玻璃是否钢化显示模式 End If Case "宽度分格5","高度分格5" If e.DataRow("宽度分格5") <>"外开扇" Or e.DataRow("高度分格5") <>"外开扇" Then e.DataRow("换向料11")=Nothing \'设置换向料表面颜色显示模式 e.DataRow("换向料12")=Nothing \'设置换向料表面处理显示模式 e.DataRow("换向料13")=Nothing \'设置换向料端头形式显示模式 e.DataRow("外开扇11")=Nothing \'设置外开扇表面颜色显示模式 e.DataRow("外开扇12")=Nothing \'设置外开扇表面处理显示模式 e.DataRow("外开扇13")=Nothing \'设置外开扇端头形式显示模式 e.DataRow("外开扇角码8")=Nothing \'设置外开扇角码表面处理显示模式 e.DataRow("外开扇扣条11")=Nothing \'设置外开扇扣条表面颜色显示模式 e.DataRow("外开扇扣条12")=Nothing \'设置外开扇扣条表面处理显示模式 e.DataRow("外开扇扣条13")=Nothing \'设置外开扇扣条端头形式显示模式 End If If e.DataRow("宽度分格5") <>"内开扇" Or e.DataRow("高度分格5") <>"内开扇" Then e.DataRow("内开扇11")=Nothing \'设置内开扇表面颜色显示模式 e.DataRow("内开扇12")=Nothing \'设置内开扇表面处理显示模式 e.DataRow("内开扇13")=Nothing \'设置内开扇端头形式显示模式 e.DataRow("内开扇角码8")=Nothing \'设置内开扇角码表面处理显示模式 e.DataRow("内开扇扣条11")=Nothing \'设置内开扇扣条表面颜色显示模式 e.DataRow("内开扇扣条12")=Nothing \'设置内开扇扣条表面处理显示模式 e.DataRow("内开扇扣条13")=Nothing \'设置内开扇扣条端头形式显示模式 End If If e.DataRow("宽度分格5")="外开扇" And e.DataRow("高度分格5")="外开扇" Or e.DataRow("宽度分格5")="内开扇" And e.DataRow("高度分格5")="内开扇" Then e.DataRow("固定玻璃扣条11")=Nothing \'设置固定扣条表面颜色显示模式 e.DataRow("固定玻璃扣条12")=Nothing \'设置固定扣条表面处理显示模式 e.DataRow("固定玻璃扣条13")=Nothing \'设置固定扣条端头形式显示模式 End If End Select |
-- 作者:有点蓝 -- 发布时间:2025/1/16 9:09:00 -- 加调试代码,看看哪些代码执行了,哪些没有执行 |
-- 作者:刘效功天津 -- 发布时间:2025/1/16 9:15:00 -- 好的,谢谢老师,我试试 |
-- 作者:刘效功天津 -- 发布时间:2025/1/16 11:08:00 -- 老师好,不知咋地,一行一行手动加载了数据,然后把所有的表达式列一个一个重新打开表达式编辑器,然后确定关闭,然后存盘后,再用咱们得自动加载数据命令后,计算得数据就出来了,谢谢老师 |