以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]求代码优化  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=129682)

--  作者:紫色幽魂
--  发布时间:2019/1/3 18:50:00
--  [求助]求代码优化
放在DataColChanged事件中,每次切换到这个表的时候都会卡半天,求优化

Dim Filter As String = "检验批编号 = \'" & e.DataRow("检验批编号") & "\'"
Dim Filter1 As String = "检验批编号 = \'" & e.DataRow("检验批编号") & "\'and 班组 <> \'"& "下料" &"\'"
Dim drs1 As List(Of DataRow) = DataTables("无损_构件清单").SQLSelect(Filter)
Dim drs2 As List(Of DataRow) = DataTables("无损_检测明细").SQLSelect(Filter)
Dim drs3 As List(Of DataRow) = DataTables("无损_检测明细").SQLSelect(Filter1)
Select Case e.DataCol.Name
    Case "检验批"
        For Each dr1 As DataRow In drs1
            dr1("检验批") = e.DataRow("检验批")
            dr1.Save
        Next
        For Each dr2 As DataRow In drs2
            dr2("检验批") = e.DataRow("检验批")
            dr2.Save
        Next
    Case "车间"
        If e.OldValue = "" Then
            For Each dr1 As DataRow In drs1
                dr1("车间") = e.DataRow("车间")
                dr1.Save
            Next
        Else
            Dim Result As DialogResult = MessageBox.Show("是否将明细表数据全部更改(不包含下料组)","提示",MessageBoxButtons.YesNo)
            For Each dr1 As DataRow In drs1
                dr1("车间") = e.DataRow("车间")
                dr1.Save
            Next
            If Result = DialogResult.Yes Then
                For Each dr2 As DataRow In drs2
                    dr2("车间") = e.DataRow("车间")
                    dr2.Save
                Next
            Else
                Return
            End If
        End If
    Case "班组"
        If e.OldValue Is Nothing Then
            For Each dr1 As DataRow In drs1
                dr1("班组") = e.DataRow("班组") \'修改构件清单表
                dr1.Save
            Next
        Else
            Dim Result As DialogResult = MessageBox.Show("是否将明细表数据全部更改(不包含下料组)","提示",MessageBoxButtons.YesNo)
            If Result = DialogResult.Yes Then
                \'SystemReady = False
                For Each dr1 As DataRow In drs1
                    dr1("班组") = e.DataRow("班组") \'修改构件清单表
                    dr1.Save
                Next
                For Each dr3 As DataRow In drs3
                    dr3("班组") = e.DataRow("班组") \'修改检测明细表(不包含班组等于下料组的行)
                    dr3.Save
                Next
                \'SystemReady = True
            ElseIf Result = DialogResult.No Then
                \'SystemReady = False
                For Each dr1 As DataRow In drs1
                    dr1("班组") = e.DataRow("班组")
                    dr1.Save
                Next
                \'SystemReady = True
            Else
                Return
            End If
            \'DataTables("无损_构件清单").SQLUpdate(drs1)
            \'DataTables("无损_检测明细").SQLUpdate(drs2)
            \'DataTables("无损_检测明细").SQLUpdate(drs3)
        End If
End Select


--  作者:有点甜
--  发布时间:2019/1/3 20:40:00
--  

1、DataColChanged事件的代码,只有你修改行列的值、或者重置列,才会执行的;

 

2、你什么时候执行这段代码?执行的目的是什么?执行 SQLSelect 的时候,每执行一次大概耗时0.5秒的。


--  作者:紫色幽魂
--  发布时间:2019/1/3 22:31:00
--  回复:(有点甜)1、DataColChanged事件的代码,只有你...
是希望在数据改变的时候对应的关联明细数据也跟着改变,执行时间就是在数据改变后执行
--  作者:有点甜
--  发布时间:2019/1/3 22:39:00
--  
以下是引用紫色幽魂在2019/1/3 22:31:00的发言:
是希望在数据改变的时候对应的关联明细数据也跟着改变,执行时间就是在数据改变后执行

 

执行一次,也不至于卡半天。请做一个对应实例发上来测试。


--  作者:紫色幽魂
--  发布时间:2019/1/3 22:56:00
--  回复:(有点甜)以下是引用紫色幽魂在2019/1/3 22:31...
用的是外部数据源,有什么方法能将数据一起直接发上来
--  作者:有点甜
--  发布时间:2019/1/3 22:57:00
--  
以下是引用紫色幽魂在2019/1/3 22:56:00的发言:
用的是外部数据源,有什么方法能将数据一起直接发上来

 

你可以单独做一个类似的项目发上来。把相关的表导出,导入到新项目,然后加上代码。


--  作者:紫色幽魂
--  发布时间:2019/1/4 8:57:00
--  回复:(有点甜)以下是引用紫色幽魂在2019/1/3 22:56...
外部数据源不能一起上传,很麻烦,我加入测试耗时代码,发现这个表不管有多少行数据,每行数据都会被执行一次这个代码,如果数据行数加载的少很快就完成了,不然会卡很久,每行数据耗时:0.0668204秒左右,数据多了就很卡,看不出来我就重新做一个项目发上来
--  作者:有点甜
--  发布时间:2019/1/4 9:07:00
--  

上传具体实例测试。