以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  帮忙看看这会有什么错误  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=78391)

--  作者:newsun2k
--  发布时间:2015/12/8 14:28:00
--  帮忙看看这会有什么错误
我在窗口中用ListView 来显示筛选后的数据,用户选择、保存后,会调用addSubmitFileLog,生成一个日志。
大多数情况下,没有问题。
偶尔会发生,明明ListView 中只有一条数据,addSubmitFileLog被执行2遍。
为了解决这个问题,我增加了一个INSERT调试的函数。记录当时的执行情况。
发现出错时,都被执行了两遍。
调试表中的数据
1 主动提交_签名 A001 1 新增
2 主动提交_签名 A001 2 新增
addSubmitFileLog A001
4 主动提交_签名 A001 1 新增
5 主动提交_签名 A001 2 新增
addSubmitFileLog A001

请袍哥帮忙看看啊,可能的错误出在哪里


执行的代码:
Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
For Each vr As WinForm.ListViewRow In lvw.CheckedRows
    Dim dr As DataRow = DataTables("主动提交").SQLFind("[编码] = \'" & vr("编码") & "\'")
    Functions.Execute("INSERT调试","主动提交_签名",vr("名称"),"1","新增")       ‘向调试表中加一行
    vr.CellUseRowStyle = False         
    If dr Is Nothing Then
        vr("状态") = "确认失败,[主动提交]中无对应的记录!"
        vr.Cells("状态").backColor = Color.red
        Continue For    
    Else
        dr("提交状态") = "TJZT02" 
        dr.save
        vr("状态") = "确认成功"
        vr.Cells("状态").backColor = Color.white
        Functions.Execute("INSERT调试","主动提交_签名",vr("名称"),"2","新增")     ‘向调试表中加一行
        Functions.Execute("addSubmitFileLog",xxx,xxx)                           ’重复执行出现在这里
    End If
        
Next


数据加载的代码:

lvw.Rows.Clear() \'清除原来的行
lvw.CheckBoxes = True
lvw.GridLines = True \'显示网格线
Dim c As WinForm.ListViewColumn 
c = lvw.Columns.Add()
c.Name = "名称" \'指定列名
c.Text = "名称" \'指定标题,这里标题和列名相同
c.Width = 500 \'指定列宽

c = lvw.Columns.Add()
c.Name = "路径" \'指定列名
c.Text = "路径" \'指定标题,这里标题和列名相同
c.Width = 150 \'指定列宽

c = lvw.Columns.Add()
c.Name = "状态" \'指定列名
c.Text = "状态" \'指定标题,这里标题和列名相同
c.Width = 100 \'指定列宽

c = lvw.Columns.Add()
c.Name = "编码" \'指定列名
c.Text = "编码" \'指定标题,这里标题和列名相同
c.Width = 200 \'指定列宽

Dim drs As List(Of DataRow)
drs = DataTables("主动提交").Select("[提交状态] = \'TJZT01\'")
For Each dr As DataRow In drs
    Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() \'增加一行
    r("名称") =  dr("提交文件")    
    r("路径") =  dr("文件当前路径")
    r("编码") =  dr("编码")

Next

lvw.ResumeRedraw() \'恢复绘制

--  作者:大红袍
--  发布时间:2015/12/8 14:37:00
--  

For Each vr As WinForm.ListViewRow In lvw.CheckedRows

 

循环多少次,就会执行多少次里面的代码。

 

再有,你整个事件循环多少次,就会执行多少次事件里面的代码。

 

加入msgbox弹出信息看一下为什么触发两次


--  作者:newsun2k
--  发布时间:2015/12/8 15:53:00
--  
袍哥:就是随机出现的,所以我才加一个INSERT调试的函数,每次操作就加一个记录
--  作者:大红袍
--  发布时间:2015/12/8 15:55:00
--  
你触发多少次,就会执行多少个代码,不可能乱触发的。